/* * Input Receptionist * * This is the thread routine for starting new output threads * */ #include #include #include #include #include #include "chat.h" void *InputRecept(void *ptArgs) { int mySock ; struct chatbuff * G ; pthread_attr_t attribThread ; (void) pthread_attr_init(&attribThread) ; (void) pthread_attr_setdetachstate(&attribThread, PTHREAD_CREATE_DETACHED) ; mySock = ((struct ptGenericArg *)ptArgs) -> sock ; G = ((struct ptGenericArg *)ptArgs) -> G ; free(ptArgs) ; while (1) { void *newData ; int clntsize ; int newClient ; struct sockaddr_in clntAddr; pthread_t newThread ; struct ptGenericArg *newThreadArgs ; char *chatterName ; clntsize = sizeof(struct sockaddr_in) ; newClient = accept(mySock, (struct sockaddr *)&clntAddr, &clntsize) ; if (newClient<0) { perror("accept") ; exit(1) ; } /* Shutting down the write side causes telnet to terminate */ /* (void) shutdown(newClient, SHUT_WR) ; */ if ((newData = malloc(sizeof(struct ptGenericArg))) == NULL) { perror("malloc") ; exit(1) ; } newThreadArgs = (struct ptGenericArg *)newData ; newThreadArgs->G = G ; newThreadArgs->sock = newClient ; if (pthread_create(&newThread, &attribThread, InputFromUser, newData)) { perror("pthread_create") ; exit(1) ; } } return ((void *)NULL) ; }