X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=server%2Fstatserv.c;h=9146973a74fef06f7e0769edd85bcfbe682692c0;hp=ac1940ba0dbec3163275b7b58550991a915acc57;hb=f69d4aa4609ff3daa71733da1ea0fcd8322ab954;hpb=044d170f0a963555486df54653cd2fdc5815928b diff --git a/server/statserv.c b/server/statserv.c index ac1940b..9146973 100644 --- a/server/statserv.c +++ b/server/statserv.c @@ -7,7 +7,20 @@ * Chas Woodfield, Fretwell Downing Datasystems. * * $Log: statserv.c,v $ - * Revision 1.48 1998-02-11 11:53:36 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 @@ -311,6 +324,7 @@ void statserv_remove(IOCHAN pIOChannel) { /* We need to look at another thread */ pNextThread = pCurrentThread->pNext; + pPrevThread = pCurrentThread; } } @@ -401,7 +415,7 @@ static void listener(IOCHAN h, int event) { 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) @@ -491,6 +505,19 @@ void statserv_closedown() 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); @@ -558,9 +585,9 @@ static void listener(IOCHAN h, int event) 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) @@ -704,6 +731,7 @@ static void add_listener(char *where, int what) if (!(l = cs_create(type, 0, what))) { logf(LOG_FATAL|LOG_ERRNO, "Failed to create listener"); + return; } ap = cs_straddr (l, addr); if (!ap) @@ -715,11 +743,15 @@ static void add_listener(char *where, int what) 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); @@ -802,12 +834,14 @@ int statserv_start(int argc, char **argv) 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; }