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. int recv_sock, send_sock;
  2. struct sockaddr_in recv_sockaddr, send_sockaddr;
  3. struct hostent *h_ent;

Мне как стороннему человеку пришлось дополнительно просматривать код, что б убедиться  что отсутствует потенциальная угроза  на одновременное изменение значений в этих переменных.  Поэтому логичнее было бы:
- эти переменные запихнуть в функцию ping()
- функцию routines() дополнить необходимым параметрами и через них передать отмеченные выше переменные
Возможно на это другой программист бы и не обратил внимание, но я связан с преподавательской деятельностью. И за такие недочеты снижаются оценки по разрабатываемым алгоритмам. Так что искренне надеюсь что это не воспримите близко. Тем более сами сказали, что это черновая версия  ;)

Код собирать пока не пробовал. так как уже чую что нужно поднимать документацию что можно было вести диалоги. Остаточных знаний по спецификации функций уже явно не хватает.

_______________________________________________
Kernel-russian mailing list
Kernel-russian@kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernel-russian