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

From winsock's recv description:

If the connection has been gracefully closed, the return value is zero.

Getting zero byte count from recv,WSARecv (or ReadFile) is the common way to learn that the other side has closed the connection.

于 2013-02-08T18:43:38.113 に答える
1

xmllmx - ソケットが閉じているかどうかを確認するために recv() を呼び出さないでください。また、クラスのデモを書いているだけでない限り、とにかくソケットを非ブロック モードに設定する可能性が高いことに注意してください。大きすぎるバッファーで recv() を呼び出すと、ブロックが発生するため、send() が発生します。 OSのバッファなどに収まらないバッファを使用して...

最後に、select() の使用は、Winsock でもかなりひどいものです。おそらく、完了ルーチンや完了ポートなどのオーバーラップ I/O のいずれかの形式を使用する必要があります。

于 2013-02-11T19:46:38.630 に答える