为什么我的 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 仅当接受新连接或发生错误时。
大家好,我正在使用 Visual C++ 2010,尝试使用 Winsock 编写 server/client 应用程序...我不确定为什么,但有时服务器会在 listen() 函数处等待,并且有时在 accept() 处。只是想知道,这两个功能的机制是什么?难道它不应该在 listen() 等待直到它听到传入连接然后继续 accept() 吗?
没有。你的观察是错误的。 listen()
不是阻塞调用。它所做的只是将端口置于 LISTENING 状态,并且要么成功要么失败。没有什么可阻止的。
accept()
阻塞,等待入站连接。
listen
函数将套接字置于侦听模式。您只需调用此函数一次。通常,此函数 returns 立即。
通过调用 accept
函数接受传入连接。在阻塞模式下(默认)它 returns 仅当接受新连接或发生错误时。