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
