client_sock_fd
是从accept()
返回的文件描述符,这是我在服务器中的代码:
char buff[BUFFSIZE];
FILE* rstream = fdopen(client_sock_fd, "r");
if(rstream == NULL){
perror("create read stream failure");
pthread_exit(NULL);
}
/* how to exit block when client shutdown the socket */
while(fscanf(rstream, "%s", buff) != EOF){
printf("%s\n", buff);
}
fclose(rstream);
close(client_sock_fd);
当我关闭客户端中的套接字或者可能发生一些错误以便关闭客户端套接字时,但是,在服务器中,它被fscanf(rstream, "%s", buff) != EOF
阻止,这意味着fscanf()
被阻止,永远不会回来。
我的问题是如何在执行fscanf()
之前测试连接是否仍然存在?