Ich verwende recv()
, um Daten von einem Socket und fcntl()
zu lesen, um den Socket blocking/non-blocking zu setzen. Meine Frage ist: Wenn ich recv()
(Blockierung) anrufe und ich fcntl()
von einem anderen Thread anrufe und den Socket nicht sperrend einstelle, wird der gerade laufende recv()
Return oder der Effekt von fcntl()
erst nach der Blockierung recv()
zurückgehen und ich rufe es an nochmal?Blockierung recv() vs fcntl()
1
A
Antwort
2
Es hat keinen Einfluss auf den aktuellen Empfangsvorgang.
Seltsame Sache zu tun.
+0
Danke für die Antwort! Ich wollte den blockierenden Thread mit dieser Methode aufwecken, aber ich denke, ich werde mir andere Optionen ansehen. –
+0
@BertalanRadostyan: "* Ich wollte den blockierenden Thread aufwecken *" Sende dem Thread einfach ein Signal (stelle sicher, dass 'SA_RESTART' nicht der Signal-Handler ist). – alk
Verwandte Themen
- 1. Den Grund für recv Blockierung für immer verstehen
- 2. MPI: Blockierung vs nicht blockierende
- 3. Event Loop vs Multithread-Blockierung IO
- 4. fcntl ersetzen unter Windows
- 5. Parser-Blockierung und Render-Blockierung
- 6. recv mit MSG_NONBLOCK und MSG_WAITALL
- 7. recv() gibt 0 zurück
- 8. Keine manuelle Eingabe für fcntl Problem
- 9. wie in Windows importieren fcntl Modul
- 10. Wie implementieren Blockierung lesen POSIX Threads
- 11. Socket recv() empfängt keine Daten
- 12. Lauf ohne Blockierung
- 13. MessageBeep Thread Blockierung
- 14. URL-Blockierung in OpenWRT?
- 15. EJB Blockierung Lookup
- 16. Java BufferedReader Readline-Blockierung?
- 17. Go-Blockierung von Empfangskanal
- 18. QThread Blockierung Haupt
- 19. Firewall Blockierung der Webbereitstellung
- 20. Konsolenspezifische Tasteneingabe ohne Blockierung
- 21. 1x1 Iframes Blockierung
- 22. setTimeout verursacht Popup-Blockierung
- 23. Bootstrap-Blockierung jquery Funktion
- 24. Curl (56) Recv Ausfall
- 25. PyMongo Buchse recv
- 26. recv() in Python
- 27. Herunterladen von JavaScript ohne Blockierung
- 28. C# -Blockierung Auswählen von Treenode
- 29. Keine Blockierung setTimeout (fn, 0)
- 30. Erkennung und Blockierung verdächtiger Versuche
Probieren Sie es aus. Es ist seltsam, dass ein Socket sowohl blockierend als auch nicht blockierend sein soll und dass ein anderer Thread mit dem Status "diddle" ist. Unter Linux würde ich den Socket bei der Erstellung mit socket() auf dem Client und accept4() auf dem Server nicht blockieren. –
Versuchen Sie nur asynchron einen Thread aufzuwecken, der bei einem 'Recv'-Anruf blockiert ist? Wenn ja, gibt es wahrscheinlich einen besseren/sichereren Weg, dies zu tun, selbst wenn 'fcntl' das gewünschte Ergebnis liefert. Verwenden Sie zum Beispiel 'poll', um den externen' recv'-Socket zu blockieren * oder * einen internen Socket, der nur für Benachrichtigungen innerhalb von Prozessen verwendet wird. –
@BrianMcFarland Dies ist genau das, was ich vorhabe, aber da es nicht funktionieren würde (laut EJP's Antwort), werde ich Ihre Ideen untersuchen. Vielen Dank! –