我正在使用C中有多个客户端的服务器,并注意到一件事:每当客户端与服务器断开连接时(服务器只是在客户端的文件描述符上调用close),选择调用(I&#) 39; m使用select来处理来自多个客户端的消息)将服务器的套接字设置为准备读取,并且调用的返回值为0.忽略此事实会阻止服务器,因为select使用服务器套接字返回0设置为就绪而不是等待其他套接字。在有人断开连接并且服务器可以接受新连接之前,是否需要对服务器套接字进行一些额外的清理?
答案 0 :(得分:0)
当你的服务器从recv()
获得0或-1时,它应该在该套接字上调用close,还应确保从读取和写入传递给select()
的fdsets中删除此套接字,否则选择( )将返回错误,表明其读/写fdsets中存在错误的fd