#define NETWORK_PATHNAME_PID "/var/run/udpgate.pid"
#define SOCK_SOURCE_CHECK_EVENTS (G_IO_IN) /* |G_IO_PRI */
#define SOCK_SOURCE_CHECK_REVENTS (SOCK_SOURCE_CHECK_EVENTS) /* |G_IO_ERR|G_IO_HUP|G_IO_NVAL */
-#define SERVER_INADDR 0x7F000001
-#undef SERVER_INADDR
#define SERVER_INADDR 0x511F02EA /* paulina.vellum.cz = 81.31.2.234; host order */
+#undef SERVER_INADDR
+#define SERVER_INADDR 0x7F000001
#define SERVER_PORT 9201 /* host order */
#define PROBE_INADDR SERVER_INADDR /* host order */
#define PROBE_PORT 8201 /* host order */
sock_gsource=NULL;
}
- write_daemon_running((pid_t)-1); /* unlink */
+ write_daemon_running((pid_t)-1); /* unlink; errors ignored */
}
static gboolean sock_gsource_new(void)
probe_send(probe,port);
client_touch(probe); /* timeout */
- write_daemon_running(getpid());
+ write_daemon_running(getpid()); /* errors ignored */
if (network_notify_hostip)
(*network_notify_hostip)(0);
return TRUE;
(*network_notify_hostip)(0);
return TRUE;
}
+
+static GMainLoop *gmainloop;
+static void network_detach_network_notify_hostip(guint32 hostip_guint32)
+{
+ if (!hostip_guint32)
+ g_main_loop_quit(gmainloop);
+}
+
+gboolean network_detach(void)
+{
+pid_t daemon_pid,forked_pid;
+
+ if ((pid_t)-1==(daemon_pid=is_daemon_running()))
+ return TRUE;
+ if (getpid()!=daemon_pid)
+ return TRUE;
+ if (!optarg_no_fork) {
+ if ((pid_t)-1==(forked_pid=fork())) {
+ g_warning("fork(2): %m");
+ return FALSE;
+ }
+ if (forked_pid) {
+ /* parent */
+ return TRUE;
+ }
+ write_daemon_running(getpid()); /* errors ignored */
+ optarg_verbose=0;
+ close(STDIN_FILENO);
+ close(STDOUT_FILENO);
+ close(STDERR_FILENO);
+ setpgrp();
+ setsid();
+ }
+
+ network_notify_hostip=network_detach_network_notify_hostip;
+ gmainloop=g_main_loop_new(
+ NULL, /* context */
+ TRUE); /* is_running; ignored */
+ g_main_loop_run(gmainloop); /* loop */
+ g_warning(_("Unable to contact the server, aborting"));
+ return FALSE;
+}