0

recv または sendall 操作中に (潜在的に) 永久にハングしない TCP サーバーを実装しようとしています。

アクティブなソケットのタイムアウトを指定するだけで十分だと思いましたが、そうではないようです: here を参照してください

では、コードを拡張して次のことを保証するにはどうすればよいでしょうか。

  • recv はどのような場合でもハングアップしません
  • sendall はどのような場合でもハングアップしません (sendall がハングアップできるかどうかはわかりません)。

どんな提案でも大歓迎です。

4

1 に答える 1

1

必要なのはselect関数です。3 つの引数を取ります。読み取りリスト、書き込みリスト、エラー リスト。次に、3 つの値を返します。それぞれ、入力したソケットのリストであり、書き込みまたは読み取りの準備ができています。(または、それを確認したい場合は、エラーが発生しました。)

rl , wl , el = select( [ serversocket , clientsocket ] , [] , [] );
for e in rl:
  if e == serversocket:
    acceptConnection( serversocket );
  else:
    readFromClient( clientsocket );
于 2013-07-14T17:49:24.377 に答える