- - PR -
非同期サーバソケットの終了について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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() を実行するとエラーになります。 |
|
投稿日時: 2004-10-28 18:11
ZOEです。
いつもここでお世話になっております。 Socket.Close() をした時に1回 asyncAccepted を呼ぶようなので そこで適切な例外処理をすれば良いかと思います。 (既に、ソケットを閉めているので、ObjectDisposedException が出ている) _________________ ZOE |
|
投稿日時: 2004-10-28 18:26
ZOEさんありがとうございます。
asyncAcceptedで処理を入れることによりうまくいきました。 Socket.Close()でasyncAcceptedが呼ばれていることに気が付きませんでした。お恥ずかしい・・・ |
1