下面的代码怎么能
while(1) {
client_name_len = sizeof(struct sockaddr_in);
newsockfd = accept(sockfd, (struct sockaddr *)&client_name, &client_name_len);
if (newsockfd < 0) {
perror("ERROR on accept");
printf("Finished\n");
close(sockfd);
exit (EXIT_FAILURE);
}
printf("a:");
pthread_t thread1;
int *addr = (int*)malloc(sizeof(int));
*addr = newsockfd;
pthread_create( &thread1, NULL, &ProcessClient, (void*)addr);
}
产生以下输出:
a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:ERROR on accept: Too many open files
a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:a:Finished
问题是perror("ERROR on accept")
,printf("Finished\n")
和printf("a:")
在同一个线程中执行,但输出是混合的。
ProcessClient 不输出任何内容,也不创建任何线程。
sockfd
是一个标准的监听 tcp 套接字。