2016-07-06 18 views
0

私はソケットを作成し、それを使ってPythonプロセスと通信します。ソケットセットブロッキングレイズOSError:[Errno 11]リソースは一時的に利用できません

私はすでにファイルディスクリプタを持っているので、私はソケットをこのように作成します。

sock = socket.fromfd(fd, socket.AF_INET, socket.SOCK_STREAM) 

私は要求の多くを受け取った場合、それは[ERRNO 11]リソース一時的に利用できないが発生します。それはI/Oモードをノンブロッキングにあった、それはEAGAINエラーを上げていたよう

When the message does not fit into the send buffer of the socket, send() normally blocks, unless the socket has been placed in nonblocking I/O mode. In nonblocking mode it would fail with the error EAGAIN or EWOULDBLOCK in this case. The select(2) call may be used to determine when it is possible to send more data.

は、次にそれが見えます。

だから私は、ブロッキングに設定します。

sock.setblocking(1) 

しかし、私は同じエラーを持っておきます。またsocket.fromfdドキュメントは言う:まず

The socket is assumed to be in blocking mode

+0

"* it * raise ..."と言うとき、あなたは 'socket.fromfd'呼び出しからその例外を取得しているということですか? –

+0

私はOSError以外のtryにラップされたソケットを介してデータを送信する別の方法があります。e:Errno 11を発生させます。 – lapinkoira

+0

AFAIK、 'send'呼び出しで' EAGAIN'(errno 11)ソケットがノンブロッキングに設定されているか、(b) 'setsockopt(...、SO_SNDTIMEO、...) 'でタイムアウトが設定されています –

答えて

-3

、私は、「Pythonのプロセスが」何であるか見当がつかない。プロセスはプロセスです。何かが書かれている言語や、何かを解釈している通訳が何かとは何の関係もありません。

次に、「私はすでにファイルディスクリプタを持っているため、この方法でソケットを作成する」ということはわかりません。私はあなたが何かを作っているとは思わないが、むしろ、構造体からある値を別の変数に割り当てる。

あなたはもともとソケットをインスタンス化方法を知らない、リソースの問題が何であるかを推測することはできません。

+0

文字通り私の質問の3行目はソケットをインスタンス化しています: socket.fromfd(fd、ファミリ、タイプ[、proto]) https://docs.python.org/2/ library/socket.html#socket.fromfd – lapinkoira

+0

これは質問に対する答えではありません。説明が必要な場合は、コメントセクションで質問してください。 –

関連する問題