Что может вызвать "ресурс временно недоступен" по команде Sock send()


что может вызвать a Resource temporarily unavailable ошибка на сокете

2 57

2 ответа:

"Resource temporarily unavailable" это сообщение об ошибке, соответствующее EAGAIN, что означает, что операция была бы заблокирована, но неблокирующая операция была запрошена. Ибо send(), это может быть связано с любым из:

  • явно помечая файловый дескриптор как неблокирующийся с помощью fcntl(); или
  • мимо MSG_DONTWAIT флаг send(); или
  • установка таймаута отправки с помощью SO_SNDTIMEO опции сокета.

это потому, что вы используете 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() чтобы лучше контролировать это поведение