- PR -

Socket.Read実行中に回線切断を検出する方法

1
投稿者投稿内容
シロネコムサシ
会議室デビュー日: 2003/05/09
投稿数: 3
投稿日時: 2003-05-09 01:11
はじめまして。
VC#にてSystem.Net.Sockets.Socketクラスを使用して通信を行っているのですが、Readメ
ソッドを実行中にネットワークケーブル断などの通信切断を検出する方法はありますでしょうか?
現状、Readメソッド実行中にLANケーブルを抜いてみても、SocketException等発生せず、ブ
ロックのままです。(このときConnectedプロパティはtrueのまま)

 よろしくお願いします。
TER
会議室デビュー日: 2003/04/15
投稿数: 5
お住まい・勤務地: 大阪
投稿日時: 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
投稿数: 3
投稿日時: 2003-05-09 13:52
TER様
回答ありがとうございます。(ReadではなくReceiveでした(^^

これについていろいろ調べていたのですが、例えば2台のマシン間で、
片方はSocket.Connect(接続する側)で、もう片方がSocket.Listen
で接続待ちしていたものをSocket.Acceptして使用(接続待ち側)して
いる場合、どちらもReceive実行して待機しているときにLANケーブル
切断を実行すると、
・接続する側のReceive→SocketExceptionを返す。
・接続待ち側のReceive→待機のまま。

というように、動作が異なるように見えます。
#接続待ち側もSocketExceptionを返してもいいような気が..

ReceiveTimeoutを設定して、一定間隔ごと(TimeOutより短い間隔)に
ダミーデータを送信してもらうというのが現状の最善策なのでしょうか。

 

1

スキルアップ/キャリアアップ(JOB@IT)