22.11.2014 23:56, Ivan Riabtsov пишет:
Поток нужен, чтобы было чем убить этот поток по таймауту, если вдруг сеть не работает и recvfrom заблокировалась, если кто-то знает, как это можно реализовать без потоков, очень хотелось бы послушать. по поводу блокировки. Работу с сокетами можно рассматривать как как работу с обычными файловыми дескрипторами. и к ним можно применять системный вызов select() который является неблокируемым. Его, кстати часто используют в реализации серверной части на сокетах. Так обычно для получения подключения от клиентов используется вызов accept() а он блокируемый. И из-за него выход из программы возможен только после того как клиент подключиться. Что б этого не происходило используется метод select(), который выходит либо по приходу данных, либо по пришедшему сигналу (например SIG_TERM) Пример использования (первая ссылка в гугле) о том что описал выше. http://www.gnu.org/software/libc/manual/html_node/Server-Example.html http://pastebin.com/WqPnGuzw критиковать не надо, так как это черновая версия, если конечно критика не глобалная, типа ты вообще все не так сдалал, надо совершенно иначе :) Не критика, скорее рекомендации. Есть небольшое нарушение общепринятого стиля программирования "Код должен легко читаться сторонним разработчиком". Задействованы глобальные переменные, которые потом юзаются в двух функциях. Я про эти:
1. intrecv_sock,send_sock; 2. structsockaddr_in recv_sockaddr,send_sockaddr; 3. structhostent*h_ent; Мне как стороннему человеку пришлось дополнительно просматривать код, что б убедиться что отсутствует потенциальная угроза на одновременное изменение значений в этих переменных. Поэтому логичнее было бы: - эти переменные запихнуть в функцию ping() - функцию routines() дополнить необходимым параметрами и через них передать отмеченные выше переменные Возможно на это другой программист бы и не обратил внимание, но я связан с преподавательской деятельностью. И за такие недочеты снижаются оценки по разрабатываемым алгоритмам. Так что искренне надеюсь что это не воспримите близко. Тем более сами сказали, что это черновая версия ;) Код собирать пока не пробовал. так как уже чую что нужно поднимать документацию что можно было вести диалоги. Остаточных знаний по спецификации функций уже явно не хватает.
_______________________________________________ Kernel-russian mailing list Kernel-russian@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernel-russian