Итак, setsockopt для тайм-аутов на сокетах AF_UNIX (AF_LOCAL) недокументированы / не работают варианты / альтернативы?

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

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

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

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

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


person CodeXCDM    schedule 16.07.2010    source источник
comment
Нашел ваш вопрос, похожий на мою проблему. Кажется, что recv () в AF_UNIX всегда неблокирует, что бы я ни делал?   -  person don_q    schedule 25.09.2014


Ответы (2)


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

person Nikolai Fetissov    schedule 16.07.2010

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

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

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

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

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

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

Удачи.

person Pierre    schedule 16.07.2010