Ich habe Socket-Programmierung seit vielen Jahren gemacht, aber ich hatte nie eine verpasste Nachricht mit TCP - bis jetzt. Ich habe einen Java-Server und einen Client in C - beide auf dem lokalen Host. Sie senden eine kurze Nachricht als Zeichenfolgen hin und her, mit einigen Verzögerungen dazwischen. Ich habe einen besonderen Fall, bei dem eine Nachricht niemals auf der Client-Seite ankommt. Es ist reproduzierbar, aber seltsam abhängig von der Maschine.Verpasste Socket Nachricht
Um einige weitere Details zu geben, kann ich die Server-Seite debuggen und sehen Sie die Sendung gefolgt von der Flush. Ich kann an den Client anschließen und durch die Select-Anrufe gehen (in einer Schleife), aber es erscheint einfach nie. Hat jemand das erlebt und gibt es eine andere Erklärung als einen Codierungsfehler?
Mit anderen Worten, wenn Sie einen verbundenen Sockel haben und einen Schreibvorgang auf der einen Seite und einen Lesevorgang auf der anderen Seite ausführen, was kann in der Mitte passieren, um so etwas zu verursachen?
Ein weiteres Detail - Ich habe tcpdump auf der Loopback-Schnittstelle verwendet und kann die verpasste Nachricht sehen.
Ist Ihr Client Multithread? Ist es möglich, dass ein separater Thread auch auf diese Nachricht selektiert wird? Welches OS verwenden Sie? –
Ich glaube nicht, dass es möglich ist, dass ein anderer Thread darauf auswählt. Dies ist unter Linux. Gute Idee - Ich habe das mit einem Zähler verifiziert. – AdamC