Ресурс временно недоступен, сокет UDP - PullRequest
0 голосов
/ 11 июля 2019

Я говорю с устройством через сокет UDP. Я отправляю команду, а затем получаю от нее ответ. Сообщения должны отправляться каждые 100 мс. Я установил тайм-аут приема с

struct timeval t = {.tv_sec = 0, .tv_usec = 100000};
setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, t, sizeof(t));

где fd - мой дескриптор файла сокета. Все отлично работает долгое время, но потом я получаю сообщение об ошибке Resource temporarily unavailable при вызове recvfrom(...). Насколько я понимаю, это происходит потому, что в буфере приема ничего нет. Я ожидал бы, что на следующей итерации буфер будет заполнен, но я все еще получаю Resource temporarily unavailable. Другими словами, система не восстанавливается. Это проблема с самим сокетом, настройками на сокете или устройством?

1 Ответ

0 голосов
/ 11 июля 2019

Не должно быть проблем с сокетом или его конфигурацией, если вы изначально получаете трафик.Вы бы увидели другое сообщение об ошибке, если бы это было так.

Если вы встречаете сообщение только один или два раза подряд, это может быть задержкой в ​​сети или потерей пакетов из-за какой-то проблемы с сетью.(например, плохой коммутатор, медленное сетевое соединение и т. д.)

Если вы постоянно сталкиваетесь с сообщением (каждый раз, когда вызывается recvfrom), может быть проблема с соединением между клиентом и сервером.Я бы подтвердил, что клиент все еще отправляет сообщения, и проверил ваше сетевое соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...