便携式检查是否已连接无阻塞插座

时间:2019-04-10 14:35:23

标签: sockets tcp

我遇到一个有趣的问题,即在Windows / Linux上selectpoll的实现上存在差异。我将首先从Windows开始,因为那里的工作按预期进行...

在Windows上,我创建一个非阻塞套接字,尝试连接,并检查是否已建立连接,我正在呼叫select (0, nullptr, &wset, nullptr, nullptr),在Windows上,它将返回0如果没有连接。问题解决了。

现在,在Linux上,它返回1并报告套接字在wset中,因此看起来我可以对其进行写入,但是如果我调用send,则显然得到了{{1 }}。我的下一个尝试是poll,要求输入SIGPIPE,有趣的是,我得到了POLLOUTPOLLHUP。只是POLLOUT会告诉我我可以POLLOUT,但是send会表明套接字未连接,但我现在遇到的问题是:这是一种便宜地< / em>检查POLLHUP是否会失败,或者我应该只发出大小为0的虚拟send,一旦失败,将套接字报告为失败(因为它将永远无法恢复?)

0 个答案:

没有答案