2010/4/9 Евгений П. <[email protected]>:
> Мне необходимо задать параметры сокета для демона телнета
> то бишь, если запущена телнет сессия с какого-нибуть хоста на необходимую
> ноду с запущенным telnetd от бизибокса, и нода, к примеру, ребутнулась, надо
> что бы телнет сессия отваливалась
> за это отвечает keepalive
> правильно ли я понимаю, что сокет задается в функции
> create_an_bind_stream_or_die(), вызываемая в xconnect.c из telnetd.c?

This is listening socket.
The connected socket is created by fd = accept(master_fd, NULL, NULL);
if telnetd is in standalone more. In inetd mode, connected socket
already exists as dufd 0 & 1.

make_new_session() already sets SO_KEEPALIVE on it in both cases.

> к fd и задаю их
> setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &const_int_1, sizeof(const_int_1));
> setsockopt(fd, SOL_TCP, SO_KEEPIDLE, &const_int_1, sizeof(const_int_1));
> setsockopt(fd, SOL_TCP, SO_KEEPCNT, &const_int_1, sizeof(const_int_1));
> setsockopt(fd, SOL_TCP, SO_KEEPINTVL, &const_int_1, sizeof(const_int_1));

And this compiles? I don't even have SO_KEEPIDLE, SO_KEEPCNT, SO_KEEPINTVL
in my copy of glibc. Looks like in Linux you need to tweak system parameters:

# echo NNN > /proc/sys/net/ipv4/tcp_keepalive_time
# echo NNN > /proc/sys/net/ipv4/tcp_keepalive_intvl
# echo NNN > /proc/sys/net/ipv4/tcp_keepalive_prob

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

default is indeed rather long - 2 hours. Set tcp_keepalive_time
to lower value.

-- 
vda
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to