网络write()是否可能失败但poll()无法检测

时间:2017-05-23 00:00:51

标签: c linux multithreading sockets poll-syscall

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

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

1 个答案:

答案 0 :(得分:3)

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

poll()将分别检测可能导致此错误的某些异常情况,例如关闭的TCP连接。这与"检测"不同失败的write() - poll()没有,也无法检测到这些错误。