繁体   English   中英

TCP无阻塞socket.connect()和socket.recv()错误问题。 (Python或C)

[英]TCP non-blocking socket.connect() and socket.recv() Error questions. (Python or C)

我正在对Python脚本中的简单HTTP重定向服务器进行压力测试。 该脚本是通过具有非阻塞套接字的epoll(边缘触发模式)设置的。 但是我观察到一些我不太了解的东西,

1)在connect()处理过程中,epoll可以同时获取ECONNREFUSED和ETIMEOUT错误。 两者都不表示远程服务器无法接受连接吗? 它们有何不同,客户如何分辨?

2)有时,当epoll通知EPOLLIN时,socket.recv()返回空字符串而不会引发任何异常(或C中的errno),我可以继续读取套接字而不会出现任何异常或错误,它总是返回空字符串。 这是为什么?

谢谢,

  1. ECONNREFUSED表示服务器拒绝了连接,而ETIMEOUT表示连接尝试已超时,即未从对等方收到有关连接尝试的指示(正或负)。

  2. socket.recv()返回空字符串且没有错误只是EOF条件,对应于C中的空读取。这种情况发生在另一端关闭连接或将其关闭以进行写入时。 通常,在发生EOF时会通知EPOLLIN ,因为您想了解EOF(并且可以在不挂起套接字的情况下安全地从套接字中recv )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM