2017-05-23 39 views
0

有可能套接字上的write()调用失败,但poll()不是 检测到任何错误?是否有任何类型的错误会导致写入失败,但不被poll()系统调用视为错误?是否有可能网络写入()失败但poll()未检测到

我有一个调度程序线程持续监视套接字,并负责检测和处理套接字错误,负责 。 我有一个工作线程,当调度程序线程通知时,它会在套接字上进行实际的读写操作。 工作线程的write()调用失败,但调度程序线程的poll()系统调用从不报告错误。这怎么发生!

+0

哪个errno会失败? –

回答

3

如果write()失败,则返回-1并设置errno这是您收到错误的唯一迹象。如果您需要在其他地方发送该错误,则需要自己做。

poll()将单独检测某些可能导致此错误的异常情况,如关闭的TCP连接。这与“检测”失败的write()-poll()不相同,也不能检测到这些错误。

+0

只有由于poll()会检测到套接字错误,write()才会失败吗? – siri

+1

@siri不是所有错误。例如:如果一个套接字被设置为非阻塞,如果缓冲区已满,写入将返回EAGAIN。或者,如果套接字是UDP,像EHOSTUNREACH这样的错误可能会随着网络状态的变化而变化。 – duskwuff

+0

'EINTR'(如果你已经中断了信号处理程序的安装)将会是'poll'看不到的另一个可能的错误。 –

相关问题