nopoll失去连接发现
长话短说。我用noPoll创建了一个Websocket服务器。nopoll失去连接发现
似乎没有办法检测到丢失的连接。所有应该说nopoll_conn
连接活动的功能都表示连接良好。
但是,如果您要使用该连接,则会发生seg故障,SIGPIPE
。
这不应该是发现客户被吊死的正确方法,对吗?
我丢了东西吗?而等待提升1.66我坚持这一点。
问候
AP
编辑:
nopoll_conn_is_ok(conn)
说,连接是否良好,充满活力和喷气书面插座生产赛格故障,SIGPIPE
。因为某些原因。
EDIT:
实际上,接收SIGPIPE
是用于网络连接的应用几乎是 “正常”。
这与网络操作的复杂性及其并发性有关。
例如,假设对方发送了所有数据并关闭了连接。在你的机器上,套接字应该仍然读取毛刺中的所有数据(虽然试图发送数据会引发错误)...
...此外,noPoll使用的事件循环可能会收到一个HUP
轮询信息(远程断开/挂断)并将其放入队列中。同时,您的代码可能仍在运行,或者它可能放置在事件队列的较早位置。因此,在您的代码运行时,连接数据尚未更新。
要在您的网络应用程序中处理SIGPIPE
(如this question所示),您应该忽略信号或处理它(如果需要采取任何措施)。
通常人们在写:
signal(SIGPIPE, SIG_IGN);
另一种方法可以使用更新的sigaction
系统调用:
/*设置信号处理*/ 结构sigaction的行为,老,old_term,old_pipe; sigemptyset(& act.sa_mask); 行为。sa_handler = SIG_IGN;如果(sigaction(SIGPIPE,& act,& old_pipe)){ perror(“could not set signal handler”); exit(errno); };
请记住,包括signal.h
#include <errno.h>
#include <signal.h>
在C++中的实现可能会略有不同,但这应该工作两个C和C++(或所以从this question似乎)。
ORIGINAL:
我不知道我理解你的问题,但如果你正在寻找测试,如果原始套接字连接正常,窥视nopoll_conn_is_ok
function。
如果你正在寻找处理on_close
事件,比我无法帮助 - 我找不到任何on_close
事件处理程序在noPoll manual ......但我相信它应该在那里。否则,也许可以查看facil.io而不是我为Linux/BSD环境编写的代码。
我在[noPoll手册](http://www.aspl.es/nopoll/html/group__nopoll__ctx.html)中没有找到任何'on_close'事件处理程序......但我确定它应该是那里有地方。否则,可以查看[facil.io](http://facil.io),而不是我为Linux/BSD环境编写的文章。 – Myst
P.S. 'noPoll'是一个C库,为什么是C++标签? – Myst
不得不看看,谢谢。 –