bind: Address already in use ソケットの再利用
socketを開いて、bindしてacceptして closeした直後に、同一 port を bindしたところ
bind: Address already in use
というエラーになった。
socketの close ミスかと思ってデバッグしても原因が分からず、いろいろ検索していたら分かった。
デフォルトの動作では、closeしてもしばらくの間ソケットが開放されないらしい。
これを回避するには setsockopt で SO_REUSEADDRを指定する必要がある。
超バッドノウハウ。。。
const int one = 1; setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(int));