mruby-socketのTCPServerでSO_REUSEADDRを有効にしてみた
表題の通り。
mruby-socketのTCPServerを使うとき、終了後にまたすぐ起動させると
Address Already in Useになりやすかったのでpull requestを出してみた。
( というネタがあるよ、と @matsumotory が教えてくれたw )
ここで。 SO_REUSEADDR
とは?
Indicates that the rules used in validating addresses supplied
in a bind(2) call should allow reuse of local addresses. For
AF_INET sockets this means that a socket may bind, except when
there is an active listening socket bound to the address.
When the listening socket is bound to INADDR_ANY with a
specific port then it is not possible to bind to this port for
any local address. Argument is an integer boolean flag.
(http://man7.org/linux/man-pages/man7/socket.7.html から引用)
listen状態ではない、つまりTIME_WAITなコネクションが残っていてもlisten出来るということのようだ。
逆にこのオプションを設定しない場合、デーモンを終了させても TIME_WAIT なコネクションが残っている間は、同じポートをlisten出来ない。
なるほど〜。
ここで、man pageの SO_REUSEADDR
の次の項目に SO_REUSEPORT
なるものを見つけたのだが今日は眠いのでこの辺で終わり。