1

Say, a tcp client has connected to a tcp server on socket s. Next, the client call shutdown(s); then how should the server detect that the client has did that operation?

PS: I have known the server will receive FD_CLOSE. However, I don't know how to check that flag on the server side.

4

2 回答 2

4

来自winsock的recv描述:

如果连接已正常关闭,则返回值为零。

recv从, WSARecv(或)获取零字节数ReadFile是了解对方已关闭连接的常用方法。

于 2013-02-08T18:43:38.113 回答
1

xmllmx - 不要调用 recv() 来检查套接字是否已关闭,使用 select() 并要求它在套接字可读或可写时发出信号。另请注意,除非您只是为类编写演示,否则您很可能希望将套接字设置为非阻塞模式,因为使用太大的缓冲区调用 recv() 会导致它阻塞,因此会导致 send()带有无法放入操作系统缓冲区的缓冲区等...

最后,在 Winsock 中使用 select() 也很糟糕;您可能想要使用其中一种形式的重叠 I/O,例如完成例程或完成端口。

于 2013-02-11T19:46:38.630 回答