#define _REENTRANT #include #include #include #include #include #include #include #include #include static void *doit(void *); #define MAXLINE 100 int main(int argc, char **argv) { int listenfd, connfd, port, clientlen, *iptr; struct sockaddr_in clientaddr; struct hostent *hp; char *haddrp; unsigned short client_port; pthread_t pthread_id; /*port = atoi(argv[1]); */ listenfd = passiveTCP(argv[1]); printf("Sock=%d", listenfd); while (1) { iptr =(int*) malloc(sizeof(int)); clientlen = sizeof(clientaddr); *iptr = accept(listenfd, (struct sockaddr *)&clientaddr, &clientlen); pthread_create(&pthread_id, NULL, &doit, (void*) iptr); } } static void *doit(void *arg) { int connfd,n; char line[MAXLINE]; connfd = *((int *) arg); free(arg); pthread_detach(pthread_self()); for ( ; ; ) { if ( (n = read(connfd, line, MAXLINE)) == 0) return; /* connection closed by other end */ write(connfd, line, n); } close(connfd); return(NULL); }