return TRUE;
}
-gboolean network_start(gint port)
+static gboolean master_start(gint port)
{
-pid_t daemon_pid;
struct sockaddr_in sockaddr_in;
g_return_val_if_fail(port>=0,FALSE);
-
- if ((pid_t)-1!=(daemon_pid=is_daemon_running())) {
- g_warning(_("Cannot start network daemon: Daemon is already running on PID %d"),(int)daemon_pid);
- return FALSE;
- }
+ g_return_val_if_fail(master==NULL,FALSE);
/* Setup 'master': */
- g_assert(master==NULL);
if (!(master=client_new()))
return FALSE;
UDPGATE_MEMZERO(&sockaddr_in);
sockaddr_in.sin_addr.s_addr=htonl(INADDR_ANY);
if (bind(master->gpollfd.fd,(struct sockaddr *)&sockaddr_in,sizeof(sockaddr_in))) {
g_warning("bind(sock,{AF_INET,INADDR_ANY:%d}): %m",(int)port);
-err_sock_gsource_destroy:
- sock_gsource_destroy();
return FALSE;
}
+ return TRUE;
+}
+
+static gboolean probe_start(gint port)
+{
+ g_return_val_if_fail(port>=0,FALSE);
+ g_return_val_if_fail(probe==NULL,FALSE);
/* Setup 'probe': */
if (!(probe=client_new()))
- goto err_sock_gsource_destroy;
+ return FALSE;
probe_send(probe,port);
client_touch(probe); /* timeout */
+ return TRUE;
+}
+gboolean network_start(gint port)
+{
+pid_t daemon_pid;
+
+ g_return_val_if_fail(port>=0,FALSE);
+
+ if ((pid_t)-1!=(daemon_pid=is_daemon_running())) {
+ g_warning(_("Cannot start network daemon: Daemon is already running on PID %d"),(int)daemon_pid);
+ return FALSE;
+ }
+ if (!master_start(port)) {
+ sock_gsource_destroy();
+ return FALSE;
+ }
+ if (!probe_start(port)) {
+ sock_gsource_destroy();
+ return FALSE;
+ }
write_daemon_running(getpid()); /* errors ignored */
if (network_notify_hostip)
(*network_notify_hostip)(0);