Hi Terry,

i have the same problem with the testprogram test_pthread of pth-1.4.1.
Seems that this problem is hidden in pth itself.
Unfortunately i am a newby in pth but it seems that only a blocking call 
might switch to another thread.

Michael

Terry wrote:

>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]
>
>
>  
>


______________________________________________________________________
GNU Portable Threads (Pth)            http://www.gnu.org/software/pth/
User Support Mailing List                            [EMAIL PROTECTED]
Automated List Manager (Majordomo)           [EMAIL PROTECTED]

Reply via email to