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 なるものを見つけたのだが今日は眠いのでこの辺で終わり。

このエントリーをはてなブックマークに追加