为什么我的 Winsock 应用程序有时在 listen() 等待,有时在 accept() 等待?

Why does my Winsock app sometimes wait at listen() and sometimes at accept()?

大家好,我正在使用 Visual C++ 2010,尝试使用 Winsock 编写 server/client 应用程序...我不确定为什么,但有时服务器会在 listen() 函数处等待,并且有时在 accept() 处。只是想知道,这两个功能的机制是什么?难道它不应该在 listen() 等待直到它听到传入连接然后继续 accept() 吗?

没有。你的观察是错误的。 listen() 不是阻塞调用。它所做的只是将端口置于 LISTENING 状态,并且要么成功要么失败。没有什么可阻止的。

accept() 阻塞,等待入站连接。

listen 函数将套接字置于侦听模式。您只需调用此函数一次。通常,此函数 returns 立即。

通过调用 accept 函数接受传入连接。在阻塞模式下(默认)它 returns 仅当接受新连接或发生错误时。