如何在epoll中通知connect()失败?

2024-06-06 07:36:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个简单的测试脚本(python)来测试web服务器的性能(这个服务器所做的就是HTTP重定向)。套接字设置为非阻塞,并注册到epoll实例。

我怎么知道connect()由于服务器无法接受更多连接而失败?我目前使用EPOLLERR作为指标。这是对的吗?

编辑: 假设: 1) 不考虑IP层网络的不可访问性。


Tags: 实例ip网络服务器脚本webhttp编辑
2条回答

你不能知道它“失败,因为服务器无法接受更多的连接”,因为没有针对这种情况的特定协议。您只能知道它失败的原因通常有:econnrefered、connection timeout、EUNREACH等

它捕获Connection Refused和其他套接字错误的情况。因为我假设您也在为挂起的套接字注册读/写可用性(success),所以您还应该手动超时那些未能在可接受的时间限制内通知您相关文件描述符的读、写或错误可用性的连接。在

ECONNREFUSED通常只在服务器的accept()队列超出其限制或服务器甚至没有绑定到远程端口的套接字时返回。ENETDOWNEHOSTDOWNENETUNREACH、和{}只在低于TCP的层(例如IP)知道由于某种原因无法到达主机时才返回,因此它们对于压力测试web服务器的性能没有特别大的帮助。在

因此,您还需要将建立连接所需的时间与超时绑定起来,以覆盖所有压力测试失败场景。超时值的选择由您决定。在

相关问题 更多 >