WinsockのError処理

解決


しゅう  2003-10-24 20:43:48  No: 79994  IP: [192.*.*.*]

下記のコードでリモートの準備ができていない時に、
起動させて何もしないで待っていると40秒後位にWinsock1_Errorが検出されます。
しかし、起動後にCommand2をクリックしてメッセージボックスを1分位表示させた後に、
メッセージボックスを消しても、Winsock1_Errorは検出されないで、
いつまで経ってもWinsock1.State=6(接続処理中)のままです。

Winsock1_Errorイベント以外にもエラー処理は必要でしょうか?
また、必要だとすればどの様なエラー処理を行なえば良いでしょうか?

よろしくお願いします。

' Form1 

Option Explicit

Private Sub Form_Load()
    Winsock1.Protocol = sckTCPProtocol
    Winsock1.RemoteHost = "192.168.1.1"
    Winsock1.RemotePort = 8192
    Winsock1.LocalPort = 0
    Winsock1.Connect
End Sub

Private Sub Command1_Click()
    Unload Me
End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    MsgBox "WinsockエラーNo. = " & Number & vbCrLf & Description & vbCrLf & "終了します。"
    Unload Me
End Sub

Private Sub Command2_Click()
    MsgBox Winsock1.State
End Sub

編集 削除
 2003-10-26 15:35:22  No: 79995  IP: [192.*.*.*]

Errorイベント内に以下の処理を追加したらどうでしょう…

If Winsock1.State <> sckClosed Then
    Winsock1.Close     '切断
End If

もちろん、 Form_Unload時には、ソケットをCloseしないといけないですね

編集 削除
しゅう  2003-10-27 08:30:09  No: 79996  IP: [192.*.*.*]

悠さん返答ありがとうございます。
上記追加しましたが、状況は変化しませんでした。
Errorイベントは発生しているが、
メッセージボックスを表示している時には、
Errorイベントを取り逃がしている様な感じがします。
どうしてかというと、フォーム起動後にCommand2でメッセージボックスを表示させて、
さらに時計を表示させているとフォーム起動後40秒後位に時計が一瞬とまるからです。
Errorイベントはこんな仕様なのでしょうか?

編集 削除
やまごろ  2003-10-27 10:33:27  No: 79997  IP: [192.*.*.*]

あー、取り逃がしてるかもしれませんね。MSCOMMのイベントもmsgbox開いてたら来ませんし。まあ、バッチ(オンラインに対する意)処理ではmsgboxは使わないのが無難だと思いますが。ユーザに知らせる必要があればステータスバー、無ければログ、というところでしょうかね。

編集 削除
しゅう  2003-10-27 12:06:24  No: 79998  IP: [192.*.*.*]

やまごろさん返答ありがとうございます。
msgbox起動中にはErrorイベントを取り逃がすみたいなので、
それを考慮して作成したいと思います。

編集 削除