我有一个处理多个客户端的服务器。连接到它的每个客户端都在自己的线程中进行服务。现在,如果服务器端出现任何错误,我想通过调用pthread_exit退出该线程,并终止该线程正在服务的客户端。然而;当我试图这样做时,我的客户正在挂。此外,这会导致不同线程中的其他客户端也挂起。我在随机点调用了pthread_exit来测试它......
答案 0 :(得分:1)
很可能问题是你在调用pthread_exit()之前没有调用close(newsockfd)。如果是这样,那么你的服务器线程就会消失,但它用来与客户端通信的套接字仍然是打开的,即使服务器不再对它做任何事情。然后客户端的传出TCP缓冲区填满,客户端无限期地等待服务器从套接字中收回更多数据,这从未发生过。