summaryrefslogtreecommitdiff
path: root/common/smtppass.c
diff options
context:
space:
mode:
authorStef Walter <stef@memberwebs.com>2005-09-07 22:28:51 +0000
committerStef Walter <stef@memberwebs.com>2005-09-07 22:28:51 +0000
commitcce8f01aae7df018612e863a1df4bf4b29b9d416 (patch)
treeec5b7db0b0f4abed7e88240d16b7e84ed251f9eb /common/smtppass.c
parenta861a0200b526ec48a0eebc9abaededa04b72318 (diff)
- Fix problems with not listening properly when in daemon mode
Diffstat (limited to 'common/smtppass.c')
-rw-r--r--common/smtppass.c58
1 files changed, 32 insertions, 26 deletions
diff --git a/common/smtppass.c b/common/smtppass.c
index e94f95e..6a16db5 100644
--- a/common/smtppass.c
+++ b/common/smtppass.c
@@ -277,28 +277,6 @@ int sp_run(const char* configfile, const char* pidfile, int dbg_level)
sp_messagex(NULL, LOG_DEBUG, "starting up (%s)...", VERSION);
- /* Create the socket */
- sock = socket(SANY_TYPE(g_state.listenaddr), SOCK_STREAM, 0);
- if(sock < 0)
- err(1, "couldn't open socket");
-
- fcntl(sock, F_SETFD, fcntl(sock, F_GETFD, 0) | FD_CLOEXEC);
- setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&true, sizeof(true));
-
- /* Unlink the socket file if it exists */
- if(SANY_TYPE(g_state.listenaddr) == AF_UNIX)
- unlink(g_state.listenname);
-
- if(bind(sock, &SANY_ADDR(g_state.listenaddr), SANY_LEN(g_state.listenaddr)) != 0)
- err(1, "couldn't bind to address: %s", g_state.listenname);
-
- /* Let 5 connections queue up */
- if(listen(sock, 5) != 0)
- {
- sp_message(NULL, LOG_CRIT, "couldn't listen on socket");
- exit(1);
- }
-
/* Drop privileges before daemonizing */
drop_privileges();
@@ -319,17 +297,45 @@ int sp_run(const char* configfile, const char* pidfile, int dbg_level)
openlog(g_state.name, 0, LOG_MAIL);
}
- sp_messagex(NULL, LOG_DEBUG, "created socket: %s", g_state.listenname);
-
/* Handle some signals */
signal(SIGPIPE, SIG_IGN);
- signal(SIGHUP, SIG_IGN);
- signal(SIGINT, on_quit);
+ signal(SIGHUP, SIG_IGN);
+ signal(SIGINT, on_quit);
signal(SIGTERM, on_quit);
siginterrupt(SIGINT, 1);
siginterrupt(SIGTERM, 1);
+ /* Create the socket */
+ sock = socket(SANY_TYPE(g_state.listenaddr), SOCK_STREAM, 0);
+ if(sock < 0)
+ {
+ sp_message(NULL, LOG_CRIT, "couldn't open socket");
+ exit(1);
+ }
+
+ fcntl(sock, F_SETFD, fcntl(sock, F_GETFD, 0) | FD_CLOEXEC);
+ setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&true, sizeof(true));
+
+ /* Unlink the socket file if it exists */
+ if(SANY_TYPE(g_state.listenaddr) == AF_UNIX)
+ unlink(g_state.listenname);
+
+ if(bind(sock, &SANY_ADDR(g_state.listenaddr), SANY_LEN(g_state.listenaddr)) != 0)
+ {
+ sp_message(NULL, LOG_CRIT, "couldn't bind to address: %s", g_state.listenname);
+ exit(1);
+ }
+
+ sp_messagex(NULL, LOG_DEBUG, "created socket: %s", g_state.listenname);
+
+ /* Let 5 connections queue up */
+ if(listen(sock, 5) != 0)
+ {
+ sp_message(NULL, LOG_CRIT, "couldn't listen on socket");
+ exit(1);
+ }
+
pid_file(1);
sp_messagex(NULL, LOG_DEBUG, "accepting connections");