PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : errno=EINTR bei nonblocking i/o



msi
27-09-2010, 23:52
Hallo,

kann mir jemand genauer erklären, wie (und ob) ein
read od. write sich mit EINTR beendet, wenn man
nonblocking sockets verwendet?

also ich habe einen FD, der ein verbundener tcp socket ist
und möchte von diesem lesen (er ist bereit) bzw auf diesen schreiben.
Ist es nun überhaupt möglich, dass EINTR auftritt und welche
Ereignisse würden zu so etwas führen?

Gibt es andere mögliche Gründe, dass zu wenig Daten bei write übertragen werden, außer dass der Puffer (in diesem Fall TCP Sendepuffer) voll ist?


Markus

jeebee
28-09-2010, 09:45
EINTR The call was interrupted by a signal before any data was read; see signal(7).


EINTR The call was interrupted by a signal before any data was written; see signal(7).

Also kann grundsätzlich ein beliebiges Signal dein read/write unterbrechen bevor überhaupt Daten gesendet wurden, was dann EINTR als Rückgabewert zur Folge hat.

msi
28-09-2010, 11:27
Also kann grundsätzlich ein beliebiges Signal dein read/write unterbrechen bevor überhaupt Daten gesendet wurden, was dann EINTR als Rückgabewert zur Folge hat.

naja wenn noch keine daten gesendet wurden, wäre der socket ja auch nicht bereit und würde sofort EAGAIN zurückliefern..