Добрый день!
Столкнулся с такой вот проблемой при работе с poll на некоторых устройствах, какой бы таймаут не задавал - первый poll может не дать никакого результата - возвращает 0, а во второй попытке уже есть нужное событие POLLIN. Это случается не всегда, но довольно часто. Это точно не таймаут, тк я пробовал задавать таймаут 30-60 сек., и ситуация так же воспроизводилась, как и на таймауте в 500мс.
Кто ни будь сталкивался с таким поведением?
ps Да, порт конечно же открыт как O_NONBLOCK
...
struct pollfd pfd = { .fd = fd, .events = POLLIN };
...
int retries = 0;
while (retries < 3) {
res = poll (&pfd, 1, ms_to);
if (res <= 0 || pfd.revents != POLLIN) {
retries++;
continue;
}
ssize_t chunksize = read (fd, buf + bytesread, size);
...