DOBON.NET DOBON.NETプログラミング掲示板過去ログ

接続タイムアウト

環境/言語:[WinXP_HE_SP2 Framework1.1]
分類:[.NET]

Socket を使ってTCP通信を行っています。
存在しないIPに接続に行った時のタイムアウト時間が
長いので、短くしたいと考えています。
.NETで接続タイムアウトの設定は用意されているのでしょうか?
また、他に何か方法は無いでしょうか?
よろしくお願い致します。

-----ソース
client = New Socket _
(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

'Begins a connection between the ContextApp and the Server. */

Try
connectDone.Reset()
client.BeginConnect(remoteEPX, AddressOf ConnectCallback, client)

connectDone.WaitOne() '接続を待つ。

Catch e As Exception
MsgBox(e.ToString)
'*returns a socket for sending data to the Server */
End Try
こんばんは、emigennです。

>.NETで接続タイムアウトの設定は用意されているのでしょうか?
私も探した事は在りますが見付けられませんでした。

そこで、待機オブジェクトのWaitOneに注目し、
Overloads Public Overridable Function WaitOne(TimeSpan, Boolean) As Boolean

例えば:
Protected mreSock As New ManualResetEvent(False)

workSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

Try
mreSock.Reset()
workSocket.BeginConnect(remoteEP, AddressOf ConnectCallback, workSocket)
If mreSock.WaitOne(sTimeOut, False) Then
'正常に接続
Else
'タイムアウト
If workSocket Is Nothing Then
Else
workSocket.Close()
workSocket = Nothing
End If
End If
Catch ex As Exception
workSocket = Nothing
End Try
ではどうでしょうか?
大変ありがとうございます。

WaitOne(TimeSpan, Boolean) でうまくいきました!!
感謝感謝です。

ただ、

> Protected mreSock As New ManualResetEvent(False)

Protected は"モジュールの変数をProtectedとして宣言することはできません"
とエラーになってしまいましたので Public の宣言に戻しました。
宣言する場所に問題があるのでしょうか?
解決済み!
  • 題名: Re[3]: 接続タイムアウト
  • 著者: emigenn
  • 日時: 2005/07/07 21:55:13
  • ID: 11685
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
> Protected は"モジュールの変数をProtectedとして宣言することはできません"
> とエラーになってしまいましたので Public の宣言に戻しました。
> 宣言する場所に問題があるのでしょうか?

問題は有りません。たまたまコピペする時のコードがProtectedに成っていただけの事です。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板