2016-04-28 4 views
0

Ich benutze eine Anwendung, in der ich TCP Blocking Socket verwende. TCP send() ist blockiert, aber netstat zeigt senden und recv Q = 0.TCP send() blockiert

Kann jemand vorschlagen, warum würde send() blockiert werden?

+0

Ich nehme an, Sie haben bereits eine erfolgreiche Blockierung 'connect()' gemacht? –

+0

ja. bind() und connect() haben das bereits blockiert. –

+0

Haben Sie bereits erfolgreich Daten auf derselben Verbindung gesendet oder blockiert sie beim allerersten Senden? Wie ist das empfangende Programm? –

Antwort

0

Die beiden Gründe, warum ich denken kann, wäre:

  • Das Empfangsprogramm hält die Buchse offen, aber nicht liest die Daten aus. In diesem Fall, wenn der Empfänger-Socket-Puffer voll wird, könnte der Sender nicht mehr senden, sein Socket-Sendepuffer würde sich füllen und senden() würde blockieren.

  • Die Netzwerkverbindung zwischen dem Sender und dem Empfänger ist nach der ersten Verbindung vollständig blockiert. Dies würde dazu führen, dass der Sender-Socket normalerweise nach einer Zeitüberschreitung fehlschlägt, auch dies wäre normalerweise nicht wiederholbar.

Weder Fall stimmt genau mit dem netstat Ergebnisse, aber aus eigener Erfahrung würde ich tcp send sagen() nicht blockiert, wenn der Puffer Buchse Sende voll ist.

+0

Vielen Dank für die Aufklärung !! –