【问题标题】:Select call sets the server's socket when a client disconnects当客户端断开连接时,选择调用设置服务器的套接字
【发布时间】:2018-05-28 07:15:15
【问题描述】:

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

【问题讨论】:

    标签: c sockets select server client


    【解决方案1】:

    当您的服务器从recv() 获得 0 或 -1 时,它应该在该套接字上调用 close,进一步应该确保从传递给 select() 的读写 fdset 中删除该套接字,否则 select() 将返回错误表示在其读/写 fdsets 中存在错误 fd

    【讨论】:

    • 非常感谢!原来我在向 fdsets 添加套接字时检查了错误的标志
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多