- PR -

非同期サーバソケットの終了について

1
投稿者投稿内容
HIRO
常連さん
会議室デビュー日: 2004/10/28
投稿数: 41
投稿日時: 2004-10-28 15:12
VB6のWinsock.OCXと同等の機能をVB.NETへ移行しようと非同期によりサーバソケットプログラムを作成しています。

BeginAcceptを実行後、ネットワークからの接続要求待ち状態でSocketをクローズさせると
「'System.InvalidOperationException' のハンドルされていない例外が system.dll で発生しました。
 追加情報 : AcceptCallback」
が必ず表示されます。BeginAcceptにてスレッドが作成されEndAcceptを実行していない状態でクローズしてしまったことが原因だど思うのですが、接続要求待ちの状態でSocketをクローズさせる方法はないのでしょうか?

以下ソースコードの一部です。

Dim ipHostInfo As IPHostEntry = Dns.Resolve(Dns.GetHostName())
Dim HostAddress As IPAddress = ipHostInfo.AddressList(0)
Dim LoEndPt As New IPEndPoint(HostAddress, pLocalPort)

Socket = New Sockets.Socket(Sockets.AddressFamily.InterNetwork, Sockets.SocketType.Stream, Sockets.ProtocolType.Tcp)
Socket.Bind(LoEndPt)
Socket.Listen(1000)
Socket.BeginAccept(New AsyncCallback(AddressOf asyncAccepted), Nothing)

この後、一度も接続要求が無い状態で

Socket.Close()

を実行するとエラーになります。
ZOE
会議室デビュー日: 2002/04/30
投稿数: 3
お住まい・勤務地: 大阪市
投稿日時: 2004-10-28 18:11
 ZOEです。
いつもここでお世話になっております。

 Socket.Close() をした時に1回 asyncAccepted を呼ぶようなので
そこで適切な例外処理をすれば良いかと思います。
(既に、ソケットを閉めているので、ObjectDisposedException が出ている)



_________________
ZOE
HIRO
常連さん
会議室デビュー日: 2004/10/28
投稿数: 41
投稿日時: 2004-10-28 18:26
ZOEさんありがとうございます。
asyncAcceptedで処理を入れることによりうまくいきました。
Socket.Close()でasyncAcceptedが呼ばれていることに気が付きませんでした。お恥ずかしい・・・
1

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