VB6 winsock-control: schließen einer Verbindung und die Verbindung zu einem anderen server

Arbeite ich auf einer älteren VB6-app. Die app verwendet die RAS-API zum herstellen einer modem-Verbindung, dann verwendet eine winsock-Steuerelement eine Verbindung zu einer IP-Adresse & port.

Ich bin jetzt hinzufügen "failover" - Funktion, um diese app wo, wenn es kann keine Verbindung zu einem server, es versucht, eine Verbindung zum nächsten in der Liste.

Sagen wir, ich habe zwei server, server-app und die server-app B. (Bei meinen tests habe ich tauschte diese um zu überprüfen, dass beide Server sind erreichbar und es gibt keine routing - /firewall-Probleme.)

Wenn ich halt server app Ein, dann ist etwas ganz seltsames passiert, wenn die app versucht, eine Verbindung zum server-app Ein und anschließend die server-app B:

mySocket.close
mySocket.Connect serverA, portA
  • mySocket.state = 6 sckConnecting
  • socket-connect-Ereignis aufgerufen wird
  • mySocket.state = 7 sckConnected
  • mySocket.Status = 8 sckClosing

(das scheint etwas seltsam: ich bin mir nicht sicher, warum es angezeigt wird, schließen Sie für ein paar Momente.)

Die Buchse bleibt im sckClosing Zustand. Nach ein paar hundert Millisekunden, ich bewege mich auf, zu versuchen, eine Verbindung zu server B:

mySocket.close
  • mySocket.state = 0 sckClosed

.

mySocket.Connect serverB, portB
  • mySocket.state = 6 sckConnecting
  • socket error-Ereignis aufgerufen wird mit Fehler 10060 (WSAETIMEDOUT)
  • mySocket.state = 9 sckError

An diesem Punkt, wenn ich start server app Ein, eine RAShangup und ein RASdial und versuchen, eine Verbindung zum server Ein, funktioniert alles OK.

Es ist, als wenn die Sequenz

socket.connect ip, port
socket.close
socket.connect newIP, newPort

funktioniert nicht ordnungsgemäß, wenn ein RAShangup und RASdial eingefügt wird. Stattdessen schlägt er mit WSAETIMEDOUT.

Ist es etwas, was ich tun müssen, zwischen Nähe und Verbindung nennen?

Hinweis: ich habe versucht, machen Sie sicher, dass die close call hat wirklich geschlossen, aber das hilft nicht:

Private Sub closeSocket(ByRef w As Winsock)
  w.Close
  Do While (w.State <> sckClosed)
    DoEvents
  Loop
End Sub

InformationsquelleAutor Simon Elliott | 2011-06-15

Schreibe einen Kommentar