ive found that out already, but what i was tryin to do was to show that somethings wrong with pth's pthread lib.
i tried a few pthreaded programs and they all have problems with pth. the prog i pasted here has only unparalleled output, but take this one followed for example. it wont even open a socket! and this time it doesnt look like a serialization problem does it ? what might be wrong with this one ? also tested on openbsd and redhat linux. thanks again in advance, terry /************************** ** ** simple multi-threaded server ** ** */ #define _REENTRANT #include <pthread.h> #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> /* the port on which to accept connections */ #define SERVERPORT 12345 /* function prototypes */ void* serverWatch( void* ); void* serveClient( void* ); int main( void ) { pthread_t watcher_thr; pthread_create( &watcher_thr, NULL, serverWatch, (void*)NULL ); for(;;) { /* do something useful */ printf( "server is running\n" ); // pthread_yield(); sleep(1); } } /************* ** ** serverWatch() ** ** watch for a client trying to connect ** ** the argument to the function is not used ** */ void* serverWatch( void* dummy ) { pthread_t dummy_thr; int srv_socket; int accepted_socket; int size; struct sockaddr_in port_addr, accept_addr; int set_opt = 1; fd_set read_set; int ready_fd; /* set up the socket on the server port */ port_addr.sin_family = AF_INET; port_addr.sin_addr.s_addr = htonl( INADDR_ANY ); port_addr.sin_port = htons( SERVERPORT ); srv_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); setsockopt( srv_socket, SOL_SOCKET, SO_REUSEADDR, (char*)&set_opt, sizeof( set_opt ) ); bind( srv_socket, (struct sockaddr*)&port_addr, sizeof( port_addr ) ); for( ;; ) { /* wait for the client to try to connect */ listen( srv_socket, 5 ); FD_ZERO( &read_set ); FD_SET( srv_socket, &read_set ); do { ready_fd = select( srv_socket+1, &read_set, NULL, NULL, NULL ); } while ( ready_fd <= 0 || !FD_ISSET( srv_socket, &read_set ) ); /* a client has connected. Accept their connection and create a * thread to serve the client */ size = sizeof( accept_addr ); accepted_socket = accept( srv_socket, (struct sockaddr*)&accept_addr, &size ); pthread_create( &dummy_thr, NULL, serveClient, (void*)accepted_socket ); } } /************* ** ** serve the client on the specified socket ** */ void* serveClient( void* socket ) { char buffer[256]; for(;;) { strcpy( buffer, "Type 'X' to quit\n" ); write( (int)socket, buffer, strlen( buffer ) ); if ( read( (int)socket, buffer, 255 ) > 0 ) { if ( buffer[0] == 'X' ) { close( (int)socket ); pthread_exit( NULL ); } } } } ______________________________________________________________________ GNU Portable Threads (Pth) http://www.gnu.org/software/pth/ User Support Mailing List [EMAIL PROTECTED] Automated List Manager (Majordomo) [EMAIL PROTECTED]