我正在尝试实现一个 TCP 服务器,它在 recv 或 sendall 操作期间不会(可能)永远挂起。
我认为为活动套接字指定超时就足够了,但情况似乎并非如此:请参阅此处
那么,我如何扩展我的代码以确保:
- recv 无论如何都不会挂机
- sendall 在任何情况下都不会挂断(好吧,我不确定 sendall 是否可以挂断)
任何建议都受到高度赞赏。
我正在尝试实现一个 TCP 服务器,它在 recv 或 sendall 操作期间不会(可能)永远挂起。
我认为为活动套接字指定超时就足够了,但情况似乎并非如此:请参阅此处
那么,我如何扩展我的代码以确保:
- recv 无论如何都不会挂机
- sendall 在任何情况下都不会挂断(好吧,我不确定 sendall 是否可以挂断)
任何建议都受到高度赞赏。
您需要的是select
功能。它需要 3 个参数;读取列表、写入列表、错误列表。然后它返回三个值,每个值都是您输入的套接字列表,可以写入或读取。(或者如果你想检查的话,有一个错误。)
rl , wl , el = select( [ serversocket , clientsocket ] , [] , [] );
for e in rl:
if e == serversocket:
acceptConnection( serversocket );
else:
readFromClient( clientsocket );