X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=server%2Fstatserv.c;h=4329b77cb221a44e151cbf272c4a1d14ebe32e9e;hb=b81a371f23d16b616e6f7355ec7345cf8a482511;hp=e4297bc1d23501888de31cfe9394fe57adea56da;hpb=8d08fd5b79e49e14ca014de8e6bed12a2cc0468d;p=yaz-moved-to-github.git diff --git a/server/statserv.c b/server/statserv.c index e4297bc..4329b77 100644 --- a/server/statserv.c +++ b/server/statserv.c @@ -6,246 +6,7 @@ * NT server based on threads by * Chas Woodfield, Fretwell Downing Informatics. * - * $Log: statserv.c,v $ - * Revision 1.72 2001-03-25 21:55:13 adam - * Added odr_intdup. Ztest server returns TaskPackage for ItemUpdate. - * - * Revision 1.71 2001/03/21 12:43:36 adam - * Implemented cs_create_host. Better error reporting for SSL comstack. - * - * Revision 1.70 2001/02/01 08:52:26 adam - * Fixed bug regarding inetd mode. - * - * Revision 1.69 2000/12/01 17:56:41 adam - * on WIN32 function statserv_closedown closes socket(s) to provoke close. - * - * Revision 1.68 2000/11/29 14:22:47 adam - * Implemented XML/SGML attributes for data1 so that d1_read reads them - * and d1_write generates proper attributes for XML/SGML records. Added - * register locking for threaded version. - * - * Revision 1.67 2000/11/23 10:58:32 adam - * SSL comstack support. Separate POSIX thread support library. - * - * Revision 1.66 2000/10/06 12:00:28 adam - * Fixed Handle leak for WIN32. - * - * Revision 1.65 2000/09/04 08:58:15 adam - * Added prefix yaz_ for most logging utility functions. - * - * Revision 1.64 2000/04/05 07:39:55 adam - * Added shared library support (libtool). - * - * Revision 1.63 2000/03/20 19:06:25 adam - * Added Segment request for fronend server. Work on admin for client. - * - * Revision 1.62 2000/03/17 12:47:02 adam - * Minor changes to admin client. - * - * Revision 1.61 2000/03/15 12:59:49 adam - * Added handle member to statserv_control. - * - * Revision 1.60 2000/03/14 09:06:11 adam - * Added POSIX threads support for frontend server. - * - * Revision 1.59 1999/11/30 13:47:12 adam - * Improved installation. Moved header files to include/yaz. - * - * Revision 1.58 1999/08/27 09:40:32 adam - * Renamed logf function to yaz_log. Removed VC++ project files. - * - * Revision 1.57 1999/07/06 12:17:15 adam - * Added option -1 that runs server once (for profiling purposes). - * - * Revision 1.56 1999/06/10 11:45:30 adam - * Added bend_start, bend_stop handlers and removed pre_init. - * Handlers bend_start/bend_stop are called when service/daemon is - * started/stopped. - * - * Revision 1.55 1999/06/10 09:18:54 adam - * Modified so that pre_init is called when service/server is started. - * - * Revision 1.54 1999/04/16 14:45:55 adam - * Added interface for tcpd wrapper for access control. - * - * Revision 1.53 1999/02/02 13:57:39 adam - * Uses preprocessor define WIN32 instead of WINDOWS to build code - * for Microsoft WIN32. - * - * 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 - * to pass the full service details accross to the service manager (CW). - * - * - * Revision 1.46 1998/01/30 15:24:57 adam - * Fixed bug in inetd code. The server listened on tcp:@:9999 even - * though it was started in inetd mode. - * - * Revision 1.45 1998/01/29 13:30:23 adam - * Better event handle system for NT/Unix. - * - * Revision 1.44 1997/11/07 13:31:52 adam - * Added NT Service name part of statserv_options_block. Moved NT - * service utility to server library. - * - * Revision 1.43 1997/10/31 12:20:09 adam - * Improved memory debugging for xmalloc/nmem.c. References to NMEM - * instead of ODR in n ESPEC-1 handling in source d1_espec.c. - * Bug fix: missing fclose in data1_read_espec1. - * - * Revision 1.42 1997/10/27 14:03:02 adam - * Added new member to statserver_options_block, pre_init, which - * specifies a callback to be invoked after command line parsing and - * before the server listens for the first time. - * - * Revision 1.41 1997/09/29 07:19:32 adam - * Server library uses nmem_init/nmem_exit. The log prefix no longer - * includes leading path on NT. - * - * Revision 1.40 1997/09/17 12:10:41 adam - * YAZ version 1.4. - * - * Revision 1.39 1997/09/09 10:10:19 adam - * Another MSV5.0 port. Changed projects to include proper - * library/include paths. - * Server starts server in test-mode when no options are given. - * - * Revision 1.38 1997/09/04 14:19:14 adam - * Added credits. - * - * Revision 1.37 1997/09/01 08:53:01 adam - * New windows NT/95 port using MSV5.0. The test server 'ztest' was - * moved a separate directory. MSV5.0 project server.dsp created. - * As an option, the server can now operate as an NT service. - * - * Revision 1.36 1996/07/06 19:58:36 quinn - * System headerfiles gathered in yconfig - * - * Revision 1.35 1996/05/29 10:03:28 quinn - * Options work - * - * Revision 1.34 1996/02/21 13:12:07 quinn - * *** empty log message *** - * - * Revision 1.33 1996/02/10 12:23:49 quinn - * Enable inetd operations fro TCP/IP stack - * - * Revision 1.32 1996/01/19 15:41:52 quinn - * *** empty log message *** - * - * Revision 1.31 1995/11/17 11:09:39 adam - * Added new option '-c' to specify configuration name in control block. - * - * Revision 1.30 1995/11/01 13:54:59 quinn - * Minor adjustments - * - * Revision 1.29 1995/10/30 12:41:29 quinn - * Added hostname lookup for server. - * - * Revision 1.28 1995/09/29 17:12:30 quinn - * Smallish - * - * Revision 1.27 1995/09/27 15:03:02 quinn - * Modified function heads & prototypes. - * - * Revision 1.26 1995/08/29 14:44:51 quinn - * Reset timeouts. - * - * Revision 1.25 1995/08/29 11:18:02 quinn - * Added code to receive close - * - * Revision 1.24 1995/06/16 10:31:39 quinn - * Added session timeout. - * - * Revision 1.23 1995/06/15 12:30:48 quinn - * Setuid-facility. - * - * Revision 1.22 1995/06/15 07:45:17 quinn - * Moving to v3. - * - * Revision 1.21 1995/06/06 08:15:40 quinn - * Cosmetic. - * - * Revision 1.20 1995/05/29 08:12:09 quinn - * Moved oid to util - * - * Revision 1.19 1995/05/16 09:37:27 quinn - * Fixed bug - * - * Revision 1.18 1995/05/16 08:51:09 quinn - * License, documentation, and memory fixes - * - * Revision 1.17 1995/05/15 11:56:42 quinn - * Asynchronous facilities. Restructuring of seshigh code. - * - * Revision 1.16 1995/04/10 10:23:40 quinn - * Some work to add scan and other things. - * - * Revision 1.15 1995/03/31 10:16:51 quinn - * Fixed logging. - * - * Revision 1.14 1995/03/31 09:18:58 quinn - * Added logging. - * - * Revision 1.13 1995/03/30 16:08:39 quinn - * Little mods. - * - * Revision 1.12 1995/03/30 13:29:02 quinn - * Smallish - * - * Revision 1.11 1995/03/30 12:18:17 quinn - * Fixed bug. - * - * Revision 1.10 1995/03/29 15:40:16 quinn - * Ongoing work. Statserv is now dynamic by default - * - * Revision 1.9 1995/03/27 08:34:30 quinn - * Added dynamic server functionality. - * Released bindings to session.c (is now redundant) - * - * Revision 1.8 1995/03/20 09:46:26 quinn - * Added osi support. - * - * Revision 1.7 1995/03/16 13:29:04 quinn - * Partitioned server. - * - * Revision 1.6 1995/03/15 15:18:52 quinn - * Little changes to better support nonblocking I/O - * Added backend.h - * - * Revision 1.5 1995/03/15 08:37:45 quinn - * Now we're pretty much set for nonblocking I/O. - * - * Revision 1.4 1995/03/14 16:59:48 quinn - * Bug-fixes - * - * Revision 1.3 1995/03/14 11:30:15 quinn - * Works better now. - * - * Revision 1.2 1995/03/14 10:28:03 quinn - * More work on demo server. - * - * Revision 1.1 1995/03/10 18:22:45 quinn - * The rudiments of an asynchronous server. - * + * $Id: statserv.c,v 1.77 2001-10-05 14:43:22 adam Exp $ */ #include @@ -256,12 +17,16 @@ #include #include "service.h" #else -#if HAVE_PTHREAD_H -#include -#endif #include #include #endif + +#if YAZ_POSIX_THREADS +#include +#elif YAZ_GNU_THREADS +#include +#endif + #include #include #include @@ -590,6 +355,7 @@ void sigterm(int sig) } static void *new_session (void *vp); +static int no_sessions = 0; /* UNIX listener */ static void listener(IOCHAN h, int event) @@ -605,6 +371,7 @@ static void listener(IOCHAN h, int event) { int res; + ++no_sessions; if (pipe(hand) < 0) { yaz_log(LOG_FATAL|LOG_ERRNO, "pipe"); @@ -697,9 +464,11 @@ static void listener(IOCHAN h, int event) close(hand[1]); } else + { iochan_setflags(h, EVENT_INPUT | EVENT_EXCEPT); /* reset listener */ - -#if HAVE_PTHREAD_H + ++no_sessions; + } +#if YAZ_POSIX_THREADS if (control_block.threads) { pthread_t child_thread; @@ -708,6 +477,23 @@ static void listener(IOCHAN h, int event) } else new_session(new_line); +#elif YAZ_GNU_THREADS + if (control_block.threads) + { + pth_attr_t attr; + pth_t child_thread; + + attr = pth_attr_new (); + pth_attr_set (attr, PTH_ATTR_JOINABLE, FALSE); + pth_attr_set (attr, PTH_ATTR_STACK_SIZE, 32*1024); + pth_attr_set (attr, PTH_ATTR_NAME, "session"); + yaz_log (LOG_LOG, "pth_spawn begin"); + child_thread = pth_spawn (attr, new_session, new_line); + yaz_log (LOG_LOG, "pth_spawn finish"); + pth_attr_destroy (attr); + } + else + new_session(new_line); #else new_session(new_line); #endif @@ -758,8 +544,8 @@ static void *new_session (void *vp) iochan_setdata(new_chan, newas); iochan_settimeout(new_chan, control_block.idle_timeout * 60); a = cs_addrstr(new_line); - yaz_log(LOG_LOG, "Accepted connection from %s", a ? a : "[Unknown]"); - + yaz_log(LOG_LOG, "Starting session %d from %s", + no_sessions, a ? a : "[Unknown]"); if (control_block.threads) { event_loop(&new_chan); @@ -790,7 +576,8 @@ static void inetd_connection(int what) iochan_setdata(chan, assoc); iochan_settimeout(chan, control_block.idle_timeout * 60); addr = cs_addrstr(line); - yaz_log(LOG_LOG, "Inetd association from %s", addr ? addr : "[UNKNOWN]"); + yaz_log(LOG_LOG, "Inetd association from %s", + addr ? addr : "[UNKNOWN]"); assoc->cs_get_mask = EVENT_INPUT; } else @@ -982,7 +769,10 @@ int check_options(int argc, char **argv) control_block.dynamic = 0; break; case 'T': -#if HAVE_PTHREAD_H +#if YAZ_POSIX_THREADS + control_block.dynamic = 0; + control_block.threads = 1; +#elif YAZ_GNU_THREADS control_block.dynamic = 0; control_block.threads = 1; #else