- - PR -
winsockでの通信についてお伺いしたい事があります。
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-09-23 15:02
お世話になっております。sandayuと申します。
Windows2000 + WinSock + C言語でクライアント、サーバープログラムを組んでおります。 クライアントからデータをサーバーへ送信(send())し、サーバーより送信したデータを クライアント側で受信(recv())しているのですが、このときサーバー側の送信ポートが 切断された事をクライアント側でキャッチするのに、recv()で取得したデータが0バイト であるという条件を使用しております。 これで、サーバーの送信ポートの切断は認識できるのですが、サーバーの受信ポートを 切断した場合、クライアント側ではどのようにして認識すればよいのでしょうか? send()関数で-1をキャッチした場合で対応可能でしょうか? アドバイスよろしくお願いいたします。 |
|
投稿日時: 2005-09-26 08:18
受信側と同じです。recvで0の時に閉じてください。sendで-1が返されるのは、あくまで送信エラーのときです。送信でエラーになったからと言って、切断されているとは限りません。
TCPには非正規の手順で切断された場合(ネットワークケーブルの断線など)、これを検出する手段は標準では提供されません。KeepAliveを有効にするか、自分自身で定期的にデータの送受信を行い、切断を検出する必要があります。 |
|
投稿日時: 2005-10-05 15:21
甕星さん返信有難うございます。
>TCPには非正規の手順で切断された場合(ネットワークケーブルの断線など)、これを検出する >手段は標準では提供されません。KeepAliveを有効にするか、自分自身で定期的にデータの送 >受信を行い、切断を検出する必要があります。 なるほど。 実は、recvで0も完全ではないようで、PC1−@−HUB−A−PC2間での通信の際に、Aを切断 しても、PC1でそれをキャッチできなかったりという問題も発生しました。 本当に切断されたかどうかをキャッチするには、やはり定期的な通信で実現するのが 良いようです。 |
1