gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:52:37 24 4
gpt4 key购买 nike

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

1) epoll 可以在connect() 过程中得到ECONNREFUSED 和ETIMEOUT errno。它们不是都表示远程服务器无法接受连接吗?它们有何不同,客户如何区分?

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

谢谢,

最佳答案

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

  2. socket.recv() 返回一个空字符串没有错误只是 EOF 条件,对应于 C 中的一个空读取。当对方关闭连接时会发生这种情况,或者关闭它下来写作。当 EOF 发生时通知 EPOLLIN 是正常的,因为您想知道 EOF(并且因为您可以安全地从套接字recv 而不会挂起)。

关于python - TCP 非阻塞 socket.connect() 和 socket.recv() 错误问题。 (Python 或 C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13404538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com