Здравствуйте. В общем использую неблокирующие сокеты (чтобы не ждать вызов connect()), т.к. соектов несколько, использую poll(). На сокеты необходимо поставить таймаут. Если делать это в poll() - то он возвращается сразу же, как на каком то сокеты появилось событие, либо ждет таймаут, если вообещ ни на однмо сокете нет событий. У меня такая ситуация почти невозможно (сокетов много, где то все равно будет событие), т.е. есть большой шанс, что сокет будет висеть очень долго и нельзя будет определить его таймаут.
Если ставить таймаут через setsockopt() - то непонятно, как его отслеживать, потому что poll() не помечает на нем никаких событий, а на уровне SOL_SOCKET, SO_ERROR равен 0.
Как разрешить данную проблему? Как из множества неблокированных сокетов определить, что у каких то истек таймаут?
P.S. попробовал после вызова connect() вернуть сокет в блокирующий режим - ничего не изменилось, после возврата из poll() на тех сокетах, где точно истек таймаут, установленный по setsockopt(), на уровне SOL_SOCKET SO_ERROR не принимает ошибочные состояния, и revent равны 0