我正在尝试实现一个TCP服务器,它不会在recv或sendall操作期间永久挂起(可能)。
我认为为活动套接字指定超时就足够了,但似乎并非如此:see here
那么,我怎样才能扩展我的代码以确保:
- recv在任何情况下都不会挂断
- sendall在任何情况下都不会挂断(好吧,我不确定sendall是否可以挂断)
任何建议都非常感谢。
答案 0 :(得分:1)
您需要的是select
功能。
它需要3个参数;读取列表,写入列表,错误列表。
然后它返回三个值,每个值都是您输入的套接字列表,可以写入,读取。 (或者如果你想检查一下,就会出错。)
rl , wl , el = select( [ serversocket , clientsocket ] , [] , [] );
for e in rl:
if e == serversocket:
acceptConnection( serversocket );
else:
readFromClient( clientsocket );