Come viene collegato un errore dal socket asincrono?


7

Sto collegando un socket in modo asincrono (O_NONBLOCK + connect). Lo standard POSIX specifica che dopo aver connesso il socket è necessario segnalare l'evento rendendo il descrittore di file per il socket pronto per la scrittura. Non sembra dire nulla sui guasti durante la connessione asincrona.

Durante il test su Linux, sembra che a volte sto ottenendo POLLOUT e talvolta POLLERR in questa situazione. C'è qualche schema nel comportamento? Posso farlo segnalare gli errori in un unico modo? POSIX dice qualcosa che ho trascurato?

4

D. J. Bernstein ha alcune cose che potrebbero sembrare rilevanti: http://cr.yp.to/docs/connect.html. In particolare, suggerisce diversi modi per ottenere errori.

L'UNIX Socket FAQ ha una sezione su Connect with timeout, che include ottenere l'errore da una connessione non riuscita utilizzando getsockopt

  0

Entrambi i testi presuppongono che l'connect notifica all'utente successo connessione/fallimento per evento POLLOUT. Tuttavia, quello che sto vedendo è che Linux utilizza POLLOUT o POLLERR per questo scopo. 22 feb. 092009-02-22 11:28:09