实现非阻塞TCP服务器

时间:2013-07-14 17:34:48

标签: python tcp nonblocking

我正在尝试实现一个TCP服务器,它不会在recv或sendall操作期间永久挂起(可能)。

我认为为活动套接字指定超时就足够了,但似乎并非如此:see here

那么,我怎样才能扩展我的代码以确保:

  
      
  • recv在任何情况下都不会挂断
  •   
  • sendall在任何情况下都不会挂断(好吧,我不确定sendall是否可以挂断)
  •   

任何建议都非常感谢。

1 个答案:

答案 0 :(得分:1)

您需要的是select功能。 它需要3个参数;读取列表,写入列表,错误列表。 然后它返回三个值,每个值都是您输入的套接字列表,可以写入,读取。 (或者如果你想检查一下,就会出错。)

rl , wl , el = select( [ serversocket , clientsocket ] , [] , [] );
for e in rl:
  if e == serversocket:
    acceptConnection( serversocket );
  else:
    readFromClient( clientsocket );