wie zu beheben WSAEWOULDBLOCK-Fehler

Ich habe eine win7-Anwendung, wo ich bin senden von Daten b\w 2-clients eine TCP-Verbindung. Beim testen fand ich heraus, dass ich immer WSAEWOULDBLOCK Fehler Häufig auf meinen sockel. Zu
diesen Fehler beheben, ich habe eine while-Schleife um es für die ex.

do  
{  
size_t value = ::send();  /*with proper arguments*/
}while(GetLastError() == 10035);

So, wenn ich error 10035 werde ich die Daten erneut.

Aber jetzt sehe ich, dass diese while-Schleife läuft manchmal unendlich und meine Anwendung geht
in eine Art deadlock-Zustand. Ich habe versucht, die Erhöhung der Größe der Steckdose, aber noch nicht benutzt.

Wenn jemand hat eine Idee wie man beheben WSAEWOULDBLOCK Fehler bitte lassen Sie es mich wissen.

  • size_t value = socket(); was ist es? Erhalten Sie WSAEWOULDBLOCK bei socket-Erstellung? Wenn nicht, verwenden Sie non-blocking-Modus (wenn ja, warum?)?
  • Sie brauchen keine Endlosschleife. Stattdessen können Sie möchten für sockel Ereignis und wenn der socket ist bereit zum senden, werden Sie benachrichtigt werden.
  • meinst du send() statt socket()? (mit entsprechenden Parametern)
  • Warum sind Sie mit non-blocking-Modus, wenn Sie nicht wissen, wie? Würde ich nur verwenden, blocking-Modus, es sei denn, Sie wissen, Sie brauchen, non-blocking, in dem Fall sollten Sie unbedingt lernen, wie man mit select().
InformationsquelleAutor SPB | 2013-01-27
Schreibe einen Kommentar