2020-11-04 Socket / SOMAXCONN / File Descriptor
Socket::SOMAXCONN
net.core.somaxconnはTCPソケットが受け付けた接続要求を格納する、キューの最大長です。backlog > net.core.somaxconnのとき、キューの大きさは暗黙にnet.core.somaxconnに切り詰められます。
net.core.somaxconnについて調べてみた - 祈れ、そして働け ~ Ora et labora
macOS の場合
$ ruby -e 'require "socket"; puts Socket::SOMAXCONN'
128
$ sysctl kern.ipc.somaxconn
kern.ipc.somaxconn: 128
server.listen(Socket::SOMAXCONN)
SOMAXCONN
の値で server.listen
するコード。
require 'socket'
server = Socket.new(:INET, :STREAM)
addr = Socket.pack_sockaddr_in(4481, '0.0.0.0')
server.bind(addr)
server.listen(Socket::SOMAXCONN)
connection, _ = server.accept
- 参考になりそうな調査記事: え、サーバ増やしてませんか?ソケット設定したその後に!? - Qiita
ファイルディスクリプタ
個人のmacOS上の結果は下記。
# ソフトリミット
$ ulimit -Sn
256
# ハードリミット
$ ulimit -Hn
unlimited
Rubyを使って確認してみる。
> Process.getrlimit(:NOFILE)
=> [256, 9223372036854775807]