2015-05-23 3 views
0

У меня есть неблокирующий сокет, используемый для операций записи (отправки).select() VS «ручной опрос» на неблокирующий сокет

Я хотел бы знать, если выбрать() является единственным способом обнаружить, если: - сокет подключения с успешно завершен при подключении возвращается EINPROGRESS - наличие гнезда для операций записи при возвращении отправить EWOULDBLOCK или EGAIN

Является ли опрос альтернативой select()? В моем приложении у меня уже есть поток, который просыпается каждые 1 секунду, который может циклически проверяться, если connect() возвращается с 0 (соединение в порядке) и отправляет возвраты с 0 (отправка в порядке), если необходимо отправить некоторые байты.

ответ

0

Опрос альтернатив для выбора()?

Это альтернатива, но не хорошая. Ты не знаешь, как долго спать. select(). В среднем ручный опрос должен спать в течение удвоенного требуемого времени за попытку, а также отбрасывать циклы процессора во время цикла до достижения успеха. select() не имеет этих проблем.

+0

Благодарим за полезный ответ. К счастью, в моем приложении, как упоминалось выше, у меня уже есть «поток опросов», который делает некоторые вещи. Хотя (вы правы) это будет тратить процессорные циклы, я могу добавить что-то вроде этого: 'code' while (некоторое условие истинно) \t сделайте что-нибудь; \t call connect; \t \t если соединение не возвращает \t \t \t сбой; \t сон (1); конец в то время как while (некоторое состояние) \t сделать что-нибудь; \t call send; \t \t если отправка не возвращается \t \t \t сбой; \t сон (1); end while 'code' – epok

+0

Очевидно, что в предыдущем комментарии, если я достиг порогового отказа, я выхожу из цикла потока. – epok

Смежные вопросы