当客户端断开连接时,Select 调用会设置服务器的套接字

问题描述 投票:0回答:1

我正在使用 C 语言处理具有多个客户端的服务器,并注意到一件事:每当客户端与服务器断开连接时(服务器只是在客户端的文件描述符上调用 close ),就会执行 select 调用(我使用 select 来处理消息来自多个客户端)将服务器的套接字设置为可供读取,并且调用的返回值为 0。忽略此事实会阻塞服务器,因为 select 会在服务器套接字设置为就绪时不断返回 0,而不是等待其他套接字。在某人断开连接之后、服务器可以接受新连接之前,是否需要对服务器套接字进行一些额外的清理?

c sockets server client posix-select
1个回答
1
投票

当您的服务器从

recv()
获取 0 或 -1 时,它应该在该套接字上调用 close,进一步应确保此套接字从传递给
select()
的读写 fdset 中删除,否则 select() 将返回错误指示其读/写 fdset 中是否存在坏 fd

© www.soinside.com 2019 - 2024. All rights reserved.