The BAQ/Memo/Linux C/TCPソケットがTIME_WAITでも使えるようにする
もどる
TCPソケット(サーバー側)をcloseすると、そのportはしばらくの間使用不可になります。netstatで見るとTME_WAITの状態です。
このTIME_WAITの状態ではデフォルトではソケットをbindできないのですが、bindする前にsetsockoptでSO_REUSEADDRオプションを設定すると使えるようになります。
int sock, sockopt = 1;
struct sockaddr_in saddr;
sock = socket(PF_INET, SOCK_STREAM, 0);
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &sockopt, sizeof(sockopt));
memset((char *)&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = INADDR_ANY;
saddr.sin_port = htons(ポート番号);
bind(sock, (struct sockaddr *)&saddr, sizeof(saddr));
Last Update: 2005/4/6
Hidetada Baba
baba @ rarfaxp.riken.jp