我遇到一个有趣的问题,即在Windows / Linux上select
和poll
的实现上存在差异。我将首先从Windows开始,因为那里的工作按预期进行...
在Windows上,我创建一个非阻塞套接字,尝试连接,并检查是否已建立连接,我正在呼叫select
(0, nullptr, &wset, nullptr, nullptr)
,在Windows上,它将返回0如果没有连接。问题解决了。
现在,在Linux上,它返回1并报告套接字在wset
中,因此看起来我可以对其进行写入,但是如果我调用send
,则显然得到了{{1 }}。我的下一个尝试是poll
,要求输入SIGPIPE
,有趣的是,我得到了POLLOUT
和POLLHUP
。只是POLLOUT
会告诉我我可以POLLOUT
,但是send
会表明套接字未连接,但我现在遇到的问题是:这是一种便宜地< / em>检查POLLHUP
是否会失败,或者我应该只发出大小为0的虚拟send
,一旦失败,将套接字报告为失败(因为它将永远无法恢复?)>