Hat jemand eine Idee, was einen Fehler 10035 (EWOULDBLOCK) beim Lesen auf einem blockierenden Socket mit einem Timeout verursachen könnte? Dies ist unter Windows XP mit der .NET Framework Version 3.5 Socket-Bibliothek. Ich habe es nie selbst geschafft, aber einer meiner Kollegen bekommt es ständig. Er sendet ziemlich große Datenmengen an ein viel langsameres Gerät und wartet dann auf eine Antwort, die oft einen 10035-Fehler ergibt. Ich frage mich, ob es Probleme mit TCP-Puffern geben könnte, die gefüllt werden, aber in diesem Fall würde ich erwarten, dass der Lesevorgang oder die Zeitzählung abläuft. Der Socket blockiert definitiv, nicht blockierungsfrei.10035 Fehler auf einem blockierenden Socket
Antwort
http://www.lancerobinson.net/archive/2005/07/20/WinsockError10035.aspx
Dieser Fehler tritt auf, wenn der Winsock Puffer von dem Client oder Server-Seite voll werden.
Es scheint, dass der Fehler auftritt, wenn nach einem Timeout bei einem Lesevorgang erneut versucht wird. Nach dem Timeout (10060) sende ich Daten erneut und warte auf eine Antwort. Die Zeitüberschreitung scheint den Socket in den nicht blockierenden Modus zu versetzen, obwohl der Debugger zeigt, dass Blocking im .Net-Socket-Objekt auf true gesetzt ist, und ich bekomme sofort den 10035-Fehler. Wenn ich die Blockierung für den Socket vor dem erneuten Versuch explizit auf "true" festlege, geht der 10035-Fehler verloren. Das sieht wie ein Fehler oder möglicherweise eine Funktion in Winsock oder .Net aus.
https://bugzilla.novell.com/show_bug.cgi?id=599488 –
wahrscheinlich ist es ein Mono-Bug. Ich habe es gerade abgefeuert.
+1 für die Einreichung eines Fehlerberichts. Vielen Dank! Ich habe es gerade repariert: http://github.com/mono/mono/comitmit/5df31fb7877cdda9dbe160e7857dafe9428a5216 – Gonzalo
- 1. recvfrom() Fehler 10035 mit nicht blockierenden Sockets
- 2. nicht blockierenden Socket, Fehler ist immer
- 3. Flush-Operation für nicht blockierenden Java-Socket
- 4. Hung-Programm auf einem nicht-blockierenden Sockel
- 5. Socket Fehler 10052 auf UDP-Socket
- 6. Verwenden einer nicht blockierenden Socket-Verbindung in C
- 7. Wie führe ich einen nicht blockierenden Socket-Aufruf in C#, um den Verbindungsstatus zu ermitteln?
- 8. Wie ist es möglich, Send-Timeout auf einem nicht blockierenden Socket zu haben?
- 9. Wie verbinde ich() mit einem nicht blockierenden Sockel?
- 10. Java: Reconnection auf einem Socket gibt manchmal Fehler
- 11. 'Bad file descriptor' Fehler auf einem akzeptierten Socket
- 12. Wie setze ich einen Socket zurück in den blockierenden Modus (nachdem ich ihn in den nicht blockierenden Modus gesetzt habe)?
- 13. Was bedeutet Dateiende auf einem Socket?
- 14. So behandeln Sie OpenSSL SSL_ERROR_WANT_READ/WANT_WRITE auf nicht blockierenden Sockets
- 15. Android Bluetooth Socket Fehler
- 16. Unix Socket Dateiname Fehler
- 17. simulieren Socket-Fehler
- 18. Socket-Fehler - manchmal?
- 19. Android TCP Socket Fehler
- 20. Streaming-Antwort auf einem Socket in Java
- 21. Mit einem JSON auf einem offenen TCP-Socket antworten
- 22. winsock Socket-Fehler
- 23. Python Socket Programmierung Fehler
- 24. Fehler Socket Minecraft Plugin
- 25. Call recv() auf dem gleichen blockierenden Sockel von zwei Threads
- 26. "Socket auflegen" auf http.get
- 27. setSoTimeout auf einem Client-Socket hat keinen Einfluss auf den Socket
- 28. Stoppt einen bei einem blockierenden Aufruf festsitzenden Thread
- 29. Bluetooth-Socket-Fehler in Monodroid
- 30. android Socket Chat-Programm Fehler
Dank David - Das hatte ich gesehen, aber ich bin nicht völlig überzeugt, dass es meine Probleme verursacht. Ich habe versucht, die Puffer zu überschwemmen, indem ich große Datenmengen zwischen zwei Windows-Rechnern sendete, und alles, was passiert, sind die Sendeblöcke oder das Zeitlimit, gibt nie einen 10035-Fehler. Außerdem tritt der Fehler bei einer TCP-Leseoperation auf, bei der es sich um eine ziemlich kleine Datenmenge handeln sollte. Ich denke, es ist Zeit, Wireshark zu entfesseln. –