Ich denke, die Frage ist nicht neu: Ich habe einen Thread, der von einem X-Server (via XCB) und einem anderen mit TCP verbundenen Server lesen sollte, so dass Select aufgerufen werden muss.Der sichere Weg, um auszuwählen und xcb_poll_for_event zusammenarbeiten?
Was mich verwirrend ist, wenn das Programm von Auswahl zurückkehrt, stellt sich heraus, gibt es Daten in der X-Server-Link, was ist, wenn die Daten nicht genug für ein XCB-Ereignis ist? In diesem Fall sollte xcb_poll_for_event() NULL zurückgeben, aber wenn das Programm erneut auswählt, blockiert es nicht, weil es überhaupt Daten gibt, so dass das Programm im Wartezustand "beschäftigt" gefangen ist.
Ist das ein berechtigtes Problem? Ich glaube das, weil jedes XCB-Ereignis aus vielen Bytes besteht und der Server beim Senden unterbrochen werden kann.
Danke. Ich kannte diese Option vorher nicht, aber hier kann ich nicht vorhersagen, wie viele Bytes für ein XCB-Ereignis benötigt werden. Laut http://man7.org/linux/man-pages/man7/socket.7.html scheint diese Option nicht wie erwartet zu funktionieren? "Die Systemaufrufe select (2) und poll (2) berücksichtigen derzeit nicht die Einstellung SO_RCVLOWAT unter Linux und markieren einen Socket, der lesbar ist, wenn nur ein einzelnes Datenbyte verfügbar ist. Ein nachfolgendes Lesen aus dem Socket wird bis SO_RCVLOWAT blockiert Bytes sind verfügbar. " – Danath