TCP-Socket accept () gibt bei Windows Server 2012 [SYN] zurück

9

Ich benutze HAProxy, das alle 10 Sekunden einen Gesundheitscheck sendet.

Es geht folgendermaßen:

%Vor%

Mein TCP-Server wird auf folgende Weise in Java geschrieben:

%Vor%

In Windows 7 kehrt accept() nach diesem Austausch nicht zurück (es kehrt nach dem regulären syn- & gt; ack- & gt; syn-Handshake zurück), und das ist es, was ich brauche.

Wenn die Anwendung jedoch auf Windows Server 2012 ausgeführt wird, gibt accept() function das erste [SYN] zurück, das von HAProxy gesendet wird, und führt die kostspielige Operation aus.

Ich habe also 2 Fragen:

  1. Ist dieses Verhalten konfigurierbar?

  2. Wenn ich nicht auf das erste Bit oder die Nachricht warten möchte, bevor ich den Listener starte, wie kann ich die Verbindung von HAProxy auf Windows 2012 erkennen?

BEARBEITEN:

Darf es unter Windows mit dem ATM TCP / IP verbunden sein?

Ссылка

  

Wenn Sie die Funktion accept verwenden, stellen Sie sicher, dass die Funktion zurückkehren kann   bevor der Verbindungsaufbau die gesamte Strecke zurückgelegt hat   zwischen Sender und Empfänger. Dies ist, weil die Annahme-Funktion   gibt zurück, sobald es eine CONNECT ACK-Nachricht erhält; in ATM, a   Die CONNECT ACK-Nachricht wird vom nächsten Switch im Pfad alsbald zurückgegeben   wenn eine CONNECT-Nachricht verarbeitet wird (und nicht die CONNECT ACK-Nachricht)   gesendet von dem Endknoten, mit dem die Verbindung letztendlich verbunden ist   etabliert). Als solche sollten Anwendungen erkennen, dass wenn Daten sind   gesendet unmittelbar nach Erhalt einer CONNECT ACK Nachricht, Datenverlust   ist möglich, da die Verbindung möglicherweise nicht alle hergestellt wurde   der Weg zwischen Sender und Empfänger.

    
alex440 15.06.2015, 11:06
quelle

1 Antwort

1

Siehe Wie funktioniert die Funktion accept () der Socket-API?

Von Ссылка Es scheint, dass dies das erwartete Verhalten ist, da HAproxy den Socket zum Client öffnet, um ihn an den anderen Rechner zu leiten.

Das Problem ist, dass HAproxy TCP-kompatibel ist:)

Eine Problemumgehung sollte darin bestehen, mit der Ausführung Ihrer Logik zu beginnen, nachdem einige Logik vom Server überprüft wurde (z. B. wurde eine kleine Nachricht gesendet und ein ACK wurde über den Socket empfangen).

    
Henry Aloni 05.09.2015 20:50
quelle

Tags und Links