- PR -

BeginReceiveFromの強制終了について

1
投稿者投稿内容
おおお!?
会議室デビュー日: 2005/02/27
投稿数: 9
投稿日時: 2005-03-02 22:41
教えてください。
現在UDPソケット通信の受信プロセスを作っています。
処理内容としては、UDP受信を繰り返し。もしある一定時間経過すると
TIMEOUTで終了するという処理です。
ソースは
Do While True
'ソケットが来るまで待つ
Select Case WaitHandle.WaitAny(done, 1000, False)
Case 0
' 受信イベント
done(0).Reset()
'イベント初期化
Dim so2 As New StateObject
'stateオブジェクトに代入
so2.workSocket = s
'受信処理
s.BeginReceiveFrom(so2.buffer, 0, 1024, SocketFlags.None, sender, New AsyncCallback(AddressOf rcvUDP), so2)
Case 1
'タイムアウト後は受信しない
s.Close()
Exit Do
End Select
LOOP
で受信すればコールバックにて電文を抽出しています。
またタイマーを生成して、時間が来ればタイムアウトとし
done(1).setして処理を終わりたいのですが
タイムアウト後にBeginReceiveFromで待っているスレッド
が受信を行ってしまいます。この受信を行わないようにするには
どのようにすればいいのでしょうか?
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-03-03 00:03
試していませんが、EndReceiveFromを呼び出せば止まりません?
おおお!?
会議室デビュー日: 2005/02/27
投稿数: 9
投稿日時: 2005-03-03 09:04
'タイムアウト後は受信しない のすぐ下にて
EndReceiveFromを呼び出すとArgumentNullException(asyncResult が null 参照)が
返ってきてしまい、例外処理となってしまうんです。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-03-03 09:38
引用:

EndReceiveFromを呼び出すとArgumentNullException(asyncResult が null 参照)が
返ってきてしまい、例外処理となってしまうんです。



BeginRecieveFrom() の戻り値をうっちゃらかしちゃ駄目でしょ。

EndRecieveFrom() のヘルプの「使用例」に、そのものズバリなサンプルコードが書かれているような。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
1

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