linux-l: Ernster Bug: select() geht nicht!

Oliver Hillmann ohil at tequila.in-berlin.de
Mi Okt 20 02:18:11 CEST 1999


On Tue, 19 Oct 1999, Oliver Bandel wrote:

> > [..] 
> Wieso sollen keine Daten da sein? Weil recvfrom mit -1 zurückkehrt?

Weil keine da sind... Niemand sendet... Daß recvfrom mit -1 zurückkehrt
ist klar, steht ja auch so in der man page (ich RTFMte also :)... Das war
auch nicht das Ding. Das Problem ist, warum kehrt select() *sofort* (nicht
erst nach einem time-out!) zurück, *obwohl* keine Daten anliegen? Und das
nur bei einem sendto über dieselbe Socket (nicht *an* dieselbe socket),
das fehlschlug, weil niemand am anderen Ende auf UDPs lauscht. (Fehlschlug
nur im logischen Sinne, sendto kehrt natürlich fehlerlos zurück) Ohne
vorheriges sendto blockiert select() fröhlich bis zum timeout...

> Was steht denn in errno? Schon mal nachgeschaut?
> Kann es sein, daß dort EWOULD-BLOCK drin steht?

Nein: Connection refused (ECONNREFUSED) Auch irgendwie ulkig für ein
verbindungsloses Protokoll, was?

> In der recvfrom-Manpage steht nämlich, daß bei einem nicht-blockierenden
> Socket dieser Fehler auftreten muß und recvfrom eben -1 zurückliefert.
> Das passiert dann, wenn ein receive-Timeout gesetzt ist: Kommen
> dann keine Daten und es kommt zum Timeout, dann muß ja ein Fehler
> gemeldet werden.

Klaro, wie gesagt... recvfrom ist sonnenklar, select() war mein
Problemchen...

> (Na, das war doch ein wirklich freundliches RTFM, oder?)

War es, danke :) Aber wie gesagt, ich las brav, probierte eifrig,
durchforschte das Web und das Usenet... Und bisher nüx... Ich werd doch
nicht ohne vorherige Recherchen und Test, bis der Arzt kommt, hier eine
Frage posten :) 

Gruß,

der Namensvetter
-- 
Oliver Hillmann, Berlin (Germany) <ohil at tequila.in-berlin.de>



Mehr Informationen über die Mailingliste linux-l