[英]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),我可以继续读取套接字而不会出现任何异常或错误,它总是返回空字符串。 这是为什么?
谢谢,
ECONNREFUSED
表示服务器拒绝了连接,而ETIMEOUT
表示连接尝试已超时,即未从对等方收到有关连接尝试的指示(正或负)。
socket.recv()
返回空字符串且没有错误只是EOF条件,对应于C中的空读取。这种情况发生在另一端关闭连接或将其关闭以进行写入时。 通常,在发生EOF时会通知EPOLLIN
,因为您想了解EOF(并且可以在不挂起套接字的情况下安全地从套接字中recv
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.