- - PR -
Socket.Read実行中に回線切断を検出する方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-05-09 01:11
はじめまして。
VC#にてSystem.Net.Sockets.Socketクラスを使用して通信を行っているのですが、Readメ ソッドを実行中にネットワークケーブル断などの通信切断を検出する方法はありますでしょうか? 現状、Readメソッド実行中にLANケーブルを抜いてみても、SocketException等発生せず、ブ ロックのままです。(このときConnectedプロパティはtrueのまま) よろしくお願いします。 |
|
投稿日時: 2003-05-09 06:52
こんにちは。
通信の切断ではありませんが、Socketを作成してから、SetSocketOptionでReceiveTimeoutを設定すればタイムアウトの検出はできます。 //2秒タイムアウト s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 2000); try { s.Recevie(buf); } ... あれ?SocketにはReadメソッドはありませんよ。 Receiveでは? |
|
投稿日時: 2003-05-09 13:52
TER様
回答ありがとうございます。(ReadではなくReceiveでした(^^ これについていろいろ調べていたのですが、例えば2台のマシン間で、 片方はSocket.Connect(接続する側)で、もう片方がSocket.Listen で接続待ちしていたものをSocket.Acceptして使用(接続待ち側)して いる場合、どちらもReceive実行して待機しているときにLANケーブル 切断を実行すると、 ・接続する側のReceive→SocketExceptionを返す。 ・接続待ち側のReceive→待機のまま。 というように、動作が異なるように見えます。 #接続待ち側もSocketExceptionを返してもいいような気が.. ReceiveTimeoutを設定して、一定間隔ごと(TimeOutより短い間隔)に ダミーデータを送信してもらうというのが現状の最善策なのでしょうか。 |
1