Ich teste eine Client-Server-Kommunikation über einen TCP-Socket. Ich schrieb den Server in C und ich benutze es auf einem Linux-Rechner und ich verwende nc
als Client für den Test.Gebrochenes Rohr nur beim zweiten Senden an einem geschlossenen Sockel
Der Server sendet nach einem initialen Austausch von Nachrichten mit dem Client einige Nachrichten periodisch an den Client, ohne eine Antwort zu erhalten.
Wenn ich den Client töten, erwarte ich, dass die erste send()
vom Server erfolgt mit EPIPE
Fehler fehlschlägt, aber dies stellt sich heraus, erst beim zweiten send()
nachdem der Kunde gegangen ist! Die erste send()
nach dem ich den Client getötet habe, kann erfolgreich 1100 Bytes an den (ich vermute, geschlossen) Socket senden. Der folgende send()
Vorgang endet mit EPIPE
wie angezeigt.
Gibt es jemanden, der mir dieses Verhalten erklären kann? Ist es aufgrund der Tatsache, dass ich auf den TCP/IP-Stack schreiben, so ist es an dem Stapel zu liefern, wenn es kann? Wenn ja, wie kann ich den Verbindungsstatus überprüfen? Um sicher zu sein, dass der Peer immer noch da ist.
Danke für Ihre Antwort, detailliert und klar. Leider kann ich die von Ihnen vorgeschlagene nc-Option nicht testen, da der Befehl auf meinem Linux-Rechner dies anscheinend nicht unterstützt.Übrigens sind die Dokumentation, auf die Sie mich hingewiesen haben, und die Erläuterungen, die Sie mir gegeben haben, klar und nützlich. Vielen Dank! – Igor