Таким образом, setsockopt для тайм-аутов на сокетах AF_UNIX (AF_LOCAL) ... недокументировано / не работает ... опции / альтернативы? - PullRequest
2 голосов
/ 16 июля 2010

Я использую Fedora 13, если это имеет значение.

Я посмотрел справочные страницы по unix (7), setsockopt и send / recv.

Чтение man-страниц, кажется, более или менее говорит мне, что не все опции гарантированно делают НИЧЕГО ... и, очевидно, только некоторые из них, которые работают / не работают, на самом деле задокументированы.

В частности ... Я хотел посмотреть, возможны ли таймауты. По крайней мере, в моей системе SO_RCVTIMEO фактически устанавливает таймаут для семейства вызовов recv ... но SO_SNDTIMEO переводит сокет в режим неблокирования без тайм-аута.

Итак, мой вопрос ... что я могу сделать, чтобы обойти тот факт, что setsockopt не является надежным способом работы с таймаутами на сокетах AF_UNIX?

Ответы [ 2 ]

1 голос
/ 16 июля 2010

Хм, а как насчет select(2) или poll(2) или epoll(4) с таймаутом?

0 голосов
/ 16 июля 2010

Что я могу сделать, чтобы обойти тот факт, что setsockopt не является надежным способом работы с таймаутами на сокетах AF_UNIX?

Ну, не используйте их.

Я использовал epoll (4) в G-WAN (сервер веб-приложений), и мне пришлось столкнуться с той же проблемой.

Существует три основных способа обработки тайм-аутов:

  1. таймеры (если вам не нужно прерывать ваш код как дурак)
  2. опрос (выделенный поток с циклом для проверки fds, требует времени)
  3. тайм-ауты(например, epoll_wait () со значением тайм-аута, замедляет все)

Некоторые используют каналы для пробуждения файлов, на которых вы хотите действовать.Мои тесты показали, что это огромная трата ресурсов.Что бы вы ни делали, это будет неэффективно или сложно.Иногда оба (спасибо разработчикам идиотских ядер).

Удачи.

...