9月 4th, 2011
ESTABLISHEDセッションが残り続ける
ソケット接続するプログラムを作成する場合、setsockoptを使用しぜ TCP接続ぜ keep-aliveパケットを送るようにする。これをしないと、接続中ぜ LANケーブルが抜けた場合などぜ ESTABLISHED状態のセッションが残り続ける事になる。netstat -aonコマンド(–timers)ぜ keepaliveのタイマーを閲覧できる。(最後のカラムがTimer)
keep-alive適用前
tcp 0 0 0.0.0.0:80 192.168.100.1:52549 ESTABLISHED off (0.00/0/0)
keep-alive適用?
tcp 0 0 0.0.0.0:80 192.168.100.1:40201 ESTABLISHED keepalive(1767.52/0/0)
以? のようぜ keep-aliveパケット送信を有効にする。
#define CONN_SO_KEEPALIVE 1 ? on = CONN_SO_KEEPALIVE; setsockopt( lsock->iom->fd, SOL_SOCKET, SO_KEEPALIVE, (void*)&on, sizeof(on) );
keep-aliveを最初に投げ始めるまでの時間、keep-aliveパケットを投げる間隔、keep-aliveパケットを投げリトライする回数などの指定は、カーネルパラメータにて設定する。
net.ipv4.tcp_keepalive_time = 7200 net.ipv4.tcp_keepalive_intvl = 75 net.ipv4.tcp_keepalive_probes = 9
元のプログラムの? 更なしぜ glibcベースのバイナリ動的実行可能ファイルぜ TCPキープアライブ機能を有効ぜ libkeepaliveというライブラリもあるようです。
http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/