Aufwachen aus select()

Gast #2805521
Lesenswert?

Da select() nur dazu da ist, zu blockieren und zurückzukehren, bietet es 
natürlich verschiedene Möglichkeiten zurückzukehren - man kann daten 
lesen, man kann daten schreiben, auftreten eines fehlers, timeout, 
signals. Du musst jetzt also herausfinden, in welchem Fall es wann 
zurückkehren soll, und diesen Fall entsprechend dem select() Aufruf 
vermitteln.
Gast #2805684
Lesenswert?

Peter II schrieb:
> es soll soetwas geheimes wie threads auch unter linux schon geben.

Ah, von einem anderen Thread aus, das ist doch schonmal eine sinnvolle 
Information. Er könnte seinen fd zu den exceptfds vom select() 
hinzufügen, dann müsste select() beim schließen der datei zurückkehren. 
Oder er macht ein Pipe, in das er vom 2. Thread schreibt, und das er 
auch dem select() Aufruf übergibt.
Gast #2805691
Lesenswert?

Peter II schrieb:
> Dr. Sommer schrieb:
>> Wie schaffst du es, close() aufzurufen, während select() läuft?
>
> es soll soetwas geheimes wie threads auch unter linux schon geben.

Das ist unter Linux böse! Wenn ein Thread im select() steht und ein 
andere ein close() aufruft dann wacht ersterer nicht auf und der Socket 
wird auch noch nicht geschlossen (erst wenn select aus anderen Gründen 
beendet). Abgesehen davon, das es Nonsens ist sowas überhaupt so zu 
implementieren - Denn je nachdem ob select() oder close() zuerst 
aufgerufen wird passiert was völlig anderes.

Zum Thema: Wenn die andere Seite des Sockets geschlossen wird, dann 
wacht select sehr wohl auf - ein EOF auf einem Socket lässt select() nie 
blockieren.

Will man das selbe Programm aus dem select aufwecken dann geht das nur 
über Signale. (Oder man mach eine Fifo auf, die man ebenfalls im select 
mit überwacht, die kann man dann vom einem beliebigen Thread aus 
befüllen)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren