2017-03-23 6 views
0

ソケットライブラリを使用して、ネットワーク経由でパケットをエミュレートしています。 socket.settimeoutためPythonソケット - 正確には "ブロッキング"ソケット操作ですか?

ドキュメント()メソッドは、..

を言う... socket.settimeout(値) ソケットをブロック 操作にタイムアウトを設定します。 value引数は、 秒を表す非負の浮動小数点数です。浮動小数点が与えられた場合、その後のソケット操作 は、操作が完了する前にタイムアウト期間の値が経過した場合にタイムアウト例外を発生させます( )。タイムアウトを[None]に設定すると、ソケット操作でのタイムアウトが無効になります( )。 s.settimeout(0.0)は と同等です。s.setblocking(0); s.settimeout(None)は、 s.setblocking(1)に相当します。

ブロッキングソケットの動作はまったくですか?それはちょうどrecv *呼び出しですか、それともsend呼び出しも含んでいますか?

ありがとうございます。

答えて

1

ブロッキング操作は、ローカルでは完全には処理できないが、接続のピアを待つ必要のある操作です。 TCPソケットの場合、これは明らかにaccept、connect、およびrecvを含みます。しかし、send:sendは、ローカル書き込みソケットバッファがいっぱいである、つまりそれ以上データを書き込めない場合にブロックする可能性があります。この場合、ピアが十分なデータを受信して​​肯定応答し、これらのデータが書き込みバッファから除去され、新しいデータを書き込む余地があるのを待たなければならない。

関連する問題