* Chas Woodfield, Fretwell Downing Datasystems.
*
* $Log: statserv.c,v $
- * Revision 1.47 1998-02-10 10:28:57 adam
+ * Revision 1.52 1998-08-21 14:13:34 adam
+ * Added GNU Configure script to build Makefiles.
+ *
+ * Revision 1.51 1998/07/07 15:51:03 adam
+ * Changed server so that it stops if bind fails - "address already in
+ * use" typically causes this.
+ *
+ * Revision 1.50 1998/06/22 11:32:39 adam
+ * Added 'conditional cs_listen' feature.
+ *
+ * Revision 1.49 1998/02/27 14:04:55 adam
+ * Fixed bug in statserv_remove.
+ *
+ * Revision 1.48 1998/02/11 11:53:36 adam
+ * Changed code so that it compiles as C++.
+ *
+ * Revision 1.47 1998/02/10 10:28:57 adam
* Added app_name, service_dependencies, service_display_name and
* options_func. options_func allows us to specify a different function
* to interogate the command line arguments. The other members allow us
{
/* We need to look at another thread */
pNextThread = pCurrentThread->pNext;
+ pPrevThread = pCurrentThread;
}
}
{
if ((res = cs_listen(line, 0, 0)) < 0)
{
- logf(LOG_FATAL, "cs_listen failed.");
+ logf(LOG_FATAL, "cs_listen failed");
return;
}
else if (res == 1)
iochan_destroy(p);
}
+static int check_ip(void *cd, const char *addr, int len, int type)
+{
+ const unsigned char *ip = (const unsigned char *) addr;
+ int i;
+ char str[64];
+
+ sprintf (str, "%u", *ip);
+ for (i = 1; i<4; i++)
+ sprintf (str + strlen(str), ".%u", ip[i]);
+ logf (LOG_DEBUG, "ip %s", str);
+ return 0;
+}
+
static void listener(IOCHAN h, int event)
{
COMSTACK line = (COMSTACK) iochan_getdata(h);
{
if (pp != h)
{
- COMSTACK l = iochan_getdata(pp);
+ COMSTACK l = (COMSTACK)iochan_getdata(pp);
cs_close(l);
iochan_destroy(pp);
}
return;
}
}
- if ((res = cs_listen(line, 0, 0)) < 0)
+ if ((res = cs_listen_check(line, 0, 0, check_ip, 0)) < 0)
{
- logf(LOG_FATAL, "cs_listen failed.");
+ logf(LOG_WARN, "cs_listen failed");
return;
}
else if (res == 1)
/* close our half of the listener socket */
for (pp = pListener; pp; pp = iochan_getnext(pp))
{
- COMSTACK l = iochan_getdata(pp);
+ COMSTACK l = (COMSTACK)iochan_getdata(pp);
cs_close(l);
iochan_destroy(pp);
}
if (!(l = cs_create(type, 0, what)))
{
logf(LOG_FATAL|LOG_ERRNO, "Failed to create listener");
+ return;
}
ap = cs_straddr (l, addr);
if (!ap)
if (cs_bind(l, ap, CS_SERVER) < 0)
{
logf(LOG_FATAL|LOG_ERRNO, "Failed to bind to %s", where);
+ cs_close (l);
+ return;
}
if (!(lst = iochan_create(cs_fileno(l), listener, EVENT_INPUT |
EVENT_EXCEPT)))
{
logf(LOG_FATAL|LOG_ERRNO, "Failed to create IOCHAN-type");
+ cs_close (l);
+ return;
}
iochan_setdata(lst, l);
if ((pListener == NULL) && *control_block.default_listen)
add_listener(control_block.default_listen,
control_block.default_proto);
- logf(LOG_LOG, "Entering event loop.");
if (pListener == NULL)
ret = 1;
else
+ {
+ logf(LOG_LOG, "Entering event loop.");
ret = event_loop(&pListener);
+ }
nmem_exit ();
return ret;
}