LINUX.ORG.RU

TIME_WAIT при создании сервера используя треды


0

0

Проблема. Кто знает подскажите пожалуйста. Пишу сервер с использованием тредов, в кот. акцептовский сокет ставитсе в очередь одним потоком, а другими вынимается и обрабатывается. Не смотря на то, что сокеты закрываеются, в netstat остаются записи по сабжу в течении минуты, как и полагается. Если fork овский сервет писать и закрывать все сокеты - все нормально. Проблемы с тредами Может быть нам нужно какие - либо установки сокета setsockopt - если кто знает подскажите. Я облазил все маны - похожего на нужное не нашел Или хотя бы как уменьшить с помощью setsockopt или SYSCTLS время TIME_WAIT

anonymous

а тебя разве беспокоит, что ты там в ядре имеешь? т.е. как оно там обеспечивает "мягкое приземление" соединения?
на вопрос "как уменьшить время тайм-аута с помощью настройки" ответить не могу, попросту не знаю как это можно сделать (кто знает и уверен - буду весьма преблагодарен за инфу).
но мне кажется правильнее поставить вопрос по-другому:
если тебе необходимо сразу же повторно использовать этот порт, который закрывается в твоем thread'e, то в setsockopt() необходимо указать SO_REUSEADDR, чтобы заблокированый порт можно было переиспользовать. но это чревато на некоторых платформах потерей данных, если читать из такого сокета из разных мест.

и вот еще какая зацепка (из man'a setsockopt() на Solaris):

SO_LINGER

Lingers on a close(2) if data is present.
This option controls the action taken when
unsent messages queue on a socket and
close(2) is performed. If SO_LINGER is set,
the system blocks the process during close(2)
until it can transmit the data or until the
time expires. If SO_LINGER is not specified,
and close(2) is issued, the system handles
the call in a way that allows the process to
continue as quickly as possible. This option
takes a linger structure, as defined in the
<sys/socket.h> header, to specify the state
of the option and linger interval.

попробуй. по крайней мере по выходу из close() будет определенная уверенность.

proff
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.