【发布时间】:2012-08-18 16:42:29
【问题描述】:
下面的代码如何
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 套接字。
【问题讨论】:
-
开什么玩笑?要么是方齐写的,要么是加拿大人写的。 :-)
-
我假设 OP 的意思是“扼流圈”。但这个问题更有趣的是“笑话”。