96

Resource temporarily unavailableソケットsend()コマンドでエラーが発生する原因は何ですか? ソケットは のように設定されていAF_UNIX, SOCK_STREAMます。ほとんどの場合は機能しますが、時々このエラーが発生します。ソケットの受信側は正常に動作しているようです。

これはあまり詳細ではないことはわかっていますが、一般的なアイデアを探しているだけです。ありがとう!

4

3 に答える 3

102

"Resource temporarily unavailable" is the error message corresponding to EAGAIN, which means that the operation would have blocked but nonblocking operation was requested. For send(), that could be due to any of:

  • explicitly marking the file descriptor as nonblocking with fcntl(); or
  • passing the MSG_DONTWAIT flag to send(); or
  • setting a send timeout with the SO_SNDTIMEO socket option.
于 2013-01-17T01:21:46.007 に答える
54

これは、non-blockingソケットを使用していて、出力バッファーがいっぱいであるためです。

send()マニュアルページから

   When the message does not fit into  the  send  buffer  of  the  socket,
   send() normally blocks, unless the socket has been placed in non-block-
   ing I/O mode.  In non-blocking mode it  would  return  EAGAIN  in  this
   case.  

EAGAINは、 「リソースが一時的に利用できません」に関連付けられているエラー コードです。

select()この動作をより適切に制御するために使用することを検討してください

于 2013-01-17T08:23:33.180 に答える