LinuxとWSLの差異: UNIX Domain Socket

LinuxUNIX Domain Socketを何度もlisten(2)できるが、WSL (Windows Subsystem for Linux)は2回目のlisten(2)がエラーになる。backlogを変更しようとしてはまった。Rubyで検証した結果は次のとおり。

Linux:

$ uname -a
Linux gut 4.14.74-v7+ #1149 SMP Mon Oct 8 17:39:42 BST 2018 armv7l GNU/Linux
$ irb -r socket
irb(main):001:0> s = UNIXServer.new('/tmp/s')
=> #<UNIXServer:/tmp/s>
irb(main):002:0> s.listen(10)
=> 0
irb(main):003:0>

WSL:

$ uname -a
Linux DESKTOP-T2R3I3H 4.4.0-17763-Microsoft #253-Microsoft Mon Dec 31 17:49:00 PST 2018 x86_64 x86_64 x86_64 GNU/Linux
$ irb -r socket
irb(main):001:0> s = UNIXServer.new('/tmp/s')
=> #<UNIXServer:/tmp/s>
irb(main):002:0> s.listen(10)
Traceback (most recent call last):
        5: from /usr/local/bin/irb:23:in `<main>'
        4: from /usr/local/bin/irb:23:in `load'
        3: from /usr/local/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `<top (required)>'
        2: from (irb):2
        1: from (irb):2:in `listen'
Errno::EADDRINUSE (Address already in use - listen(2))
irb(main):003:0>

ちなみにTCP Socketは両方とも何度でもlisten(2)できるようだ。

Linux:

$ uname -a
Linux gut 4.14.74-v7+ #1149 SMP Mon Oct 8 17:39:42 BST 2018 armv7l GNU/Linux
$ irb -r socket
irb(main):001:0> s = TCPServer.new(0)
=> #<TCPServer:fd 7, AF_INET, 0.0.0.0, 39901>
irb(main):002:0> s.listen(10)
=> 0
irb(main):003:0>

WSL:

$ uname -a
Linux DESKTOP-T2R3I3H 4.4.0-17763-Microsoft #253-Microsoft Mon Dec 31 17:49:00 PST 2018 x86_64 x86_64 x86_64 GNU/Linux
$ irb -r socket
irb(main):001:0> s = TCPServer.new(0)
=> #<TCPServer:fd 7, AF_INET, 0.0.0.0, 56466>
irb(main):002:0> s.listen(10)
=> 0
irb(main):003:0>