ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
2 мая
1425210 Топик полностью
RxTx (11.04.2024 11:43, просмотров: 81) ответил Dingo на Ещё вопрос: вызовы socket(), bind(), connect(), accept(), close() пощупал. Можно как-то сделать чтобы accept() был неблокирующим? Например, с использованием select() или poll() объединить с другими событиями. Или обойтись без него? Ну и чтобы два раза не вставать: обработчик сигнала куда отдаёт управление - где были или продолжает выполнение? В случае, если мы ждём на select(), мы вернёмся в ожидание или продолжим выполнять программу?
Можно. У сокета выставляется признак неблокирующего. Далее: применяем select/poll/epoll возникает событие что произошел accept и он обрабатывается, создается транспортный сокет. По ссылкам внизу примеры кода. 

https://man7.org/linux/man-pages/man2/select.2.html

https://man7.org/linux/man-pages/man2/poll.2.html

https://man7.org/linux/man-pages/man7/epoll.7.html

А вообще, нормальные сервера пишутся всегда с обслуживающим потоком и даже пулом потоков для транспортных сокетов.