代码之家  ›  专栏  ›  技术社区  ›  Swiss Frank

WIN32 select()报告listen()套接字上的异常;WSAGetLastError()=0?

  •  0
  • Swiss Frank  · 技术社区  · 8 年前

    标题也许说明了一切?

    Windows 10,Visual Studio社区2017。

    C++服务器侦听一个端口,生成的FD被放入FD\U集中用于输入,另一个用于异常。 select() 被调用。

    它返回,并且连接 accept() 其FD也添加到这两个FD\U集合中。

    连接正常,结束。然后将其FD从两个FD\U集合中移除。

    下一次呼叫时 选择() 我听说侦听套接字上有异常,但是 WSAGetLastError() 为零。

    收听FD O_NONBLOCK 根据我的笔记,设置是因为:

    select或poll后可能并不总是有连接等待 返回可读性事件,因为可能会有后续 网络错误。防止 接受() 我们必须设置阻止 O\u非块 .

    它也有 SO_REUSEADDR 设置

    listen() 队列深度为5。

    1 回复  |  直到 8 年前
        1
  •  3
  •   user207421    8 年前

    你需要打电话 getsockopt() 在带选项的侦听套接字上 SO_ERROR .

    来自的零 WSAGetLastError() 指的是 select() 不返回-1。