Hook auf Form und WSAAsyncSelect - Anwendung friert ein

  • VB6

    Hook auf Form und WSAAsyncSelect - Anwendung friert ein

    Guten Morgen zusammen,

    ich habe ein Socket erstellt und mittels WSAAsyncSelect die Events FD_ACCEPT, FD_CLOSE, FD_CONNECT, FD_READ und FD_WRITE abgefangen und mittels eines Hooks lasse ich dann Messages an meine Hauptform senden. Diese Hauptform untersucht die eingegangenen Nachrichten und wenn es eine WinSockMsg ist (Basiswert 10025) dann wird entsprechender Code angewendet.

    Hier ist der Code :

    Quellcode

    1. Public Function ConnectToClient()
    2. Dim lngRetConnect As Long
    3. Dim struct_sckAddr As sockaddr_in
    4. Dim lngRetSocketStart As Long
    5. With struct_sckAddr
    6. .sin_addr = lngLocalIP
    7. .sin_family = AF_INET
    8. .sin_port = htons(12350)
    9. End With
    10. lngRetSocketStart = Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
    11. lngRetConnect = connect(lngRetSocketStart, struct_sckAddr, LenB(struct_sckAddr))
    12. If lngRetConnect = SOCKET_ERROR Then
    13. MsgBox "No connection possible.", vbCritical, "An error occured"
    14. ElseIf lngRetConnect <> SOCKET_ERROR Then
    15. WSAAsyncSelect lngRetSocketStart, frmClient.hwnd, WINSOCKMSG, FD_ACCEPT Or FD_CLOSE Or FD_CONNECT Or FD_READ Or FD_WRITE
    16. lngConnectedSocket = lngRetSocketStart
    17. HookForm frmClient
    18. End If
    19. End Function
    20. Public Sub HookForm(F As Form)
    21. PrevProc = SetWindowLong(F.hwnd, GWL_WNDPROC, AddressOf WindowProc)
    22. End Sub
    23. Public Sub UnHookForm(F As Form)
    24. If PrevProc <> 0 Then
    25. SetWindowLong F.hwnd, GWL_WNDPROC, PrevProc
    26. PrevProc = 0
    27. End If
    28. End Sub
    29. Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    30. If uMsg = WINSOCKMSG Then
    31. ProcessMessage wParam, lParam
    32. Else
    33. WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
    34. End If
    35. End Function
    36. Public Function ProcessMessage(ByVal wParam As Long, ByVal lParam As Long)
    37. Select Case lParam
    38. Case FD_READ
    39. frmClient.lstSockMessages.AddItem "Socket has Data to read"
    40. GetSocketData
    41. Case FD_CONNECT
    42. frmClient.lstSockMessages.AddItem "Socket connected"
    43. Case FD_CLOSE
    44. UnHookForm frmClient
    45. Case FD_WRITE
    46. frmClient.lstSockMessages.AddItem "Socket has Data to write."
    47. SendDataToSocket
    48. Case Else
    49. frmClient.lstSockMessages.AddItem "Nr. " & wParam
    50. frmClient.lstSockMessages.AddItem lParam
    51. End Select
    52. End Function


    Leider friert mir meine Anwendung aber ein. Ich kann zwar noch Verbindungen eingehen und es werden auch Daten empfangen, aber ich kann die Anwendung nicht mehr beenden oder sonstwie steuern.

    Weiß jemand Rat ?

    Danke und liebe Grüße,

    Pascal