summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2021-09-09 12:15:32 +0200
committerLoïc Hoguin <[email protected]>2021-09-09 12:15:32 +0200
commit992831c7a516b5183c2af06260829d41aa45267c (patch)
tree4e874d3aa4fff73455fce70c5a184c171858d02f
parent48f39402181d959cad88cb3f460210c007169f50 (diff)
downloadninenines.eu-992831c7a516b5183c2af06260829d41aa45267c.tar.gz
ninenines.eu-992831c7a516b5183c2af06260829d41aa45267c.tar.bz2
ninenines.eu-992831c7a516b5183c2af06260829d41aa45267c.zip
Ranch 2.1.0
-rw-r--r--_build/Makefile4
-rw-r--r--_build/content/articles/ranch-2.1.0.asciidoc45
-rw-r--r--_build/data/projects/ranch.toml4
-rw-r--r--articles/asciideck/index.html4
-rw-r--r--articles/cowboy-2.0.0-pre.4/index.html4
-rw-r--r--articles/cowboy-2.0.0-rc.1/index.html4
-rw-r--r--articles/cowboy-2.0.0-rc.2/index.html4
-rw-r--r--articles/cowboy-2.0.0/index.html4
-rw-r--r--articles/cowboy-2.1.0/index.html4
-rw-r--r--articles/cowboy-2.2.0/index.html4
-rw-r--r--articles/cowboy-2.3.0/index.html4
-rw-r--r--articles/cowboy-2.4.0/index.html4
-rw-r--r--articles/cowboy-2.5.0/index.html4
-rw-r--r--articles/cowboy-2.6.0/index.html4
-rw-r--r--articles/cowboy-2.7.0/index.html4
-rw-r--r--articles/cowboy-2.8.0/index.html4
-rw-r--r--articles/cowboy-2.9.0/index.html4
-rw-r--r--articles/cowboy2-qs/index.html4
-rw-r--r--articles/dont-let-it-crash/index.html4
-rw-r--r--articles/erlang-meetup-10-septembre-2019/index.html4
-rw-r--r--articles/erlang-scalability/index.html4
-rw-r--r--articles/erlang-validate-utf8/index.html4
-rw-r--r--articles/erlang.mk-and-relx/index.html4
-rw-r--r--articles/erlanger-playbook-september-2015-update/index.html4
-rw-r--r--articles/erlanger-playbook/index.html4
-rw-r--r--articles/farwest-funded/index.html4
-rw-r--r--articles/github-sponsors/index.html4
-rw-r--r--articles/gun-1.0.0-rc.1/index.html4
-rw-r--r--articles/gun-1.0.0/index.html4
-rw-r--r--articles/gun-1.2.0/index.html4
-rw-r--r--articles/gun-1.3.0/index.html4
-rw-r--r--articles/gun-2.0.0-pre.1/index.html4
-rw-r--r--articles/gun-2.0.0-pre.2/index.html4
-rw-r--r--articles/gun-2.0.0-rc.1/index.html4
-rw-r--r--articles/index.html36
-rw-r--r--articles/index.xml13
-rw-r--r--articles/january-2014-status/index.html4
-rw-r--r--articles/joe_the_rubber_duck/index.html4
-rw-r--r--articles/merry-christmas-2018/index.html4
-rw-r--r--articles/merry-christmas-2019/index.html4
-rw-r--r--articles/ml-archives/index.html4
-rw-r--r--articles/on-open-source/index.html4
-rw-r--r--articles/page/2/index.html34
-rw-r--r--articles/page/3/index.html16
-rw-r--r--articles/ranch-1.3/index.html4
-rw-r--r--articles/ranch-1.6.0/index.html4
-rw-r--r--articles/ranch-1.7.0/index.html4
-rw-r--r--articles/ranch-2.0.0-rc.1/index.html4
-rw-r--r--articles/ranch-2.0.0/index.html4
-rw-r--r--articles/ranch-2.1.0/index.html344
-rw-r--r--articles/ranch-ftp/index.html4
-rw-r--r--articles/the-elephant-in-the-room/index.html4
-rw-r--r--articles/the-gateway-trilogy/index.html4
-rw-r--r--articles/the-story-so-far/index.html4
-rw-r--r--articles/tictactoe/index.html4
-rw-r--r--articles/website-update/index.html4
-rw-r--r--articles/xerl-0.1-empty-modules/index.html4
-rw-r--r--articles/xerl-0.2-two-modules/index.html4
-rw-r--r--articles/xerl-0.3-atomic-expressions/index.html4
-rw-r--r--articles/xerl-0.4-expression-separator/index.html4
-rw-r--r--articles/xerl-0.5-intermediate-module/index.html4
-rw-r--r--docs/en/gun/2.0/guide/migrating_from_1.3.asciidoc19
-rw-r--r--docs/en/gun/2.0/guide/migrating_from_1.3/index.html7
-rw-r--r--docs/en/ranch/1.5/guide/embedded.asciidoc48
-rw-r--r--docs/en/ranch/1.5/guide/protocols.asciidoc99
-rw-r--r--docs/en/ranch/1.5/manual/ranch/index.html382
-rw-r--r--docs/en/ranch/1.5/manual/ranch_transport/index.html381
-rw-r--r--docs/en/ranch/1.6/guide/embedded/index.html4
-rw-r--r--docs/en/ranch/1.6/guide/index.html4
-rw-r--r--docs/en/ranch/1.6/guide/internals/index.html4
-rw-r--r--docs/en/ranch/1.6/guide/introduction/index.html4
-rw-r--r--docs/en/ranch/1.6/guide/listeners/index.html4
-rw-r--r--docs/en/ranch/1.6/guide/migrating_from_1.5/index.html4
-rw-r--r--docs/en/ranch/1.6/guide/migrating_from_1.6/index.html4
-rw-r--r--docs/en/ranch/1.6/guide/migrating_from_1.x/index.html4
-rw-r--r--docs/en/ranch/1.6/guide/parsers/index.html4
-rw-r--r--docs/en/ranch/1.6/guide/protocols/index.html4
-rw-r--r--docs/en/ranch/1.6/guide/ssl_auth/index.html4
-rw-r--r--docs/en/ranch/1.6/guide/transports/index.html4
-rw-r--r--docs/en/ranch/1.6/guide/upcoming_2.0_changes/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.child_spec/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.get_addr/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.get_max_connections/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.get_port/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.get_protocol_options/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.get_status/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.get_transport_options/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.handshake/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.info/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.procs/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.remove_connection/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.resume_listener/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.set_max_connections/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.set_protocol_options/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.set_transport_options/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.start_listener/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.stop_listener/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.suspend_listener/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch.wait_for_connections/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch_app/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch_protocol/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch_ssl/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch_tcp/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch_transport.sendfile/index.html4
-rw-r--r--docs/en/ranch/1.6/manual/ranch_transport/index.html4
-rw-r--r--docs/en/ranch/1.7/guide/embedded/index.html4
-rw-r--r--docs/en/ranch/1.7/guide/index.html4
-rw-r--r--docs/en/ranch/1.7/guide/internals/index.html4
-rw-r--r--docs/en/ranch/1.7/guide/introduction/index.html4
-rw-r--r--docs/en/ranch/1.7/guide/listeners/index.html4
-rw-r--r--docs/en/ranch/1.7/guide/migrating_from_1.5/index.html4
-rw-r--r--docs/en/ranch/1.7/guide/migrating_from_1.6/index.html4
-rw-r--r--docs/en/ranch/1.7/guide/migrating_from_1.7/index.html4
-rw-r--r--docs/en/ranch/1.7/guide/migrating_from_1.x/index.html4
-rw-r--r--docs/en/ranch/1.7/guide/parsers/index.html4
-rw-r--r--docs/en/ranch/1.7/guide/protocols/index.html4
-rw-r--r--docs/en/ranch/1.7/guide/ssl_auth/index.html4
-rw-r--r--docs/en/ranch/1.7/guide/transports/index.html4
-rw-r--r--docs/en/ranch/1.7/guide/upcoming_2.0_changes/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.child_spec/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.get_addr/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.get_max_connections/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.get_port/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.get_protocol_options/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.get_status/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.get_transport_options/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.handshake/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.info/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.procs/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.recv_proxy_header/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.remove_connection/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.resume_listener/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.set_max_connections/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.set_protocol_options/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.set_transport_options/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.start_listener/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.stop_listener/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.suspend_listener/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch.wait_for_connections/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch_app/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch_protocol/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch_proxy_header.header/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch_proxy_header.parse/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch_proxy_header/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch_ssl/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch_tcp/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch_transport.sendfile/index.html4
-rw-r--r--docs/en/ranch/1.7/manual/ranch_transport/index.html4
-rw-r--r--docs/en/ranch/1.8/guide/embedded/index.html4
-rw-r--r--docs/en/ranch/1.8/guide/index.html4
-rw-r--r--docs/en/ranch/1.8/guide/internals/index.html4
-rw-r--r--docs/en/ranch/1.8/guide/introduction/index.html4
-rw-r--r--docs/en/ranch/1.8/guide/listeners/index.html4
-rw-r--r--docs/en/ranch/1.8/guide/migrating_from_1.5/index.html4
-rw-r--r--docs/en/ranch/1.8/guide/migrating_from_1.6/index.html4
-rw-r--r--docs/en/ranch/1.8/guide/migrating_from_1.7/index.html4
-rw-r--r--docs/en/ranch/1.8/guide/migrating_from_1.x/index.html4
-rw-r--r--docs/en/ranch/1.8/guide/parsers/index.html4
-rw-r--r--docs/en/ranch/1.8/guide/protocols/index.html4
-rw-r--r--docs/en/ranch/1.8/guide/ssl_auth/index.html4
-rw-r--r--docs/en/ranch/1.8/guide/transports/index.html4
-rw-r--r--docs/en/ranch/1.8/guide/upcoming_2.0_changes/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.child_spec/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.get_addr/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.get_max_connections/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.get_port/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.get_protocol_options/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.get_status/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.get_transport_options/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.handshake/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.info/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.procs/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.recv_proxy_header/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.remove_connection/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.resume_listener/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.set_max_connections/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.set_protocol_options/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.set_transport_options/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.start_listener/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.stop_listener/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.suspend_listener/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch.wait_for_connections/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch/index.html6
-rw-r--r--docs/en/ranch/1.8/manual/ranch_app/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch_protocol/index.html6
-rw-r--r--docs/en/ranch/1.8/manual/ranch_proxy_header.header/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch_proxy_header.parse/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch_proxy_header/index.html6
-rw-r--r--docs/en/ranch/1.8/manual/ranch_ssl/index.html6
-rw-r--r--docs/en/ranch/1.8/manual/ranch_tcp/index.html6
-rw-r--r--docs/en/ranch/1.8/manual/ranch_transport.sendfile/index.html4
-rw-r--r--docs/en/ranch/1.8/manual/ranch_transport/index.html6
-rw-r--r--docs/en/ranch/2.0/guide/connection_draining/index.html4
-rw-r--r--docs/en/ranch/2.0/guide/embedded/index.html4
-rw-r--r--docs/en/ranch/2.0/guide/index.html4
-rw-r--r--docs/en/ranch/2.0/guide/internals/index.html4
-rw-r--r--docs/en/ranch/2.0/guide/introduction/index.html4
-rw-r--r--docs/en/ranch/2.0/guide/listeners/index.html4
-rw-r--r--docs/en/ranch/2.0/guide/migrating_from_1.5/index.html4
-rw-r--r--docs/en/ranch/2.0/guide/migrating_from_1.6/index.html4
-rw-r--r--docs/en/ranch/2.0/guide/migrating_from_1.7/index.html4
-rw-r--r--docs/en/ranch/2.0/guide/migrating_from_1.x/index.html4
-rw-r--r--docs/en/ranch/2.0/guide/parsers/index.html4
-rw-r--r--docs/en/ranch/2.0/guide/protocols/index.html4
-rw-r--r--docs/en/ranch/2.0/guide/ssl_auth/index.html4
-rw-r--r--docs/en/ranch/2.0/guide/transports/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.child_spec/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.get_addr/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.get_max_connections/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.get_port/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.get_protocol_options/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.get_status/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.get_transport_options/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.handshake/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.handshake_cancel/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.handshake_continue/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.info/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.procs/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.recv_proxy_header/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.remove_connection/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.resume_listener/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.set_max_connections/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.set_protocol_options/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.set_transport_options/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.start_listener/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.stop_listener/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.suspend_listener/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch.wait_for_connections/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch_app/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch_protocol/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch_proxy_header.header/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch_proxy_header.parse/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch_proxy_header/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch_ssl/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch_tcp/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch_transport.sendfile/index.html4
-rw-r--r--docs/en/ranch/2.0/manual/ranch_transport/index.html4
-rw-r--r--docs/en/ranch/2.1/guide/connection_draining.asciidoc98
-rw-r--r--docs/en/ranch/2.1/guide/connection_draining/index.html258
-rw-r--r--docs/en/ranch/2.1/guide/embedded.asciidoc47
-rw-r--r--docs/en/ranch/2.1/guide/embedded/index.html (renamed from docs/en/ranch/1.5/guide/embedded/index.html)31
-rw-r--r--docs/en/ranch/2.1/guide/index.html (renamed from docs/en/ranch/1.5/guide/index.html)33
-rw-r--r--docs/en/ranch/2.1/guide/internals.asciidoc (renamed from docs/en/ranch/1.5/guide/internals.asciidoc)5
-rw-r--r--docs/en/ranch/2.1/guide/internals/index.html (renamed from docs/en/ranch/1.5/guide/internals/index.html)19
-rw-r--r--docs/en/ranch/2.1/guide/introduction.asciidoc (renamed from docs/en/ranch/1.5/guide/introduction.asciidoc)7
-rw-r--r--docs/en/ranch/2.1/guide/introduction/index.html (renamed from docs/en/ranch/1.5/guide/introduction/index.html)17
-rw-r--r--docs/en/ranch/2.1/guide/listeners.asciidoc (renamed from docs/en/ranch/1.5/guide/listeners.asciidoc)225
-rw-r--r--docs/en/ranch/2.1/guide/listeners/index.html (renamed from docs/en/ranch/1.5/guide/listeners/index.html)167
-rw-r--r--docs/en/ranch/2.1/guide/migrating_from_1.5.asciidoc76
-rw-r--r--docs/en/ranch/2.1/guide/migrating_from_1.5/index.html221
-rw-r--r--docs/en/ranch/2.1/guide/migrating_from_1.6.asciidoc46
-rw-r--r--docs/en/ranch/2.1/guide/migrating_from_1.6/index.html201
-rw-r--r--docs/en/ranch/2.1/guide/migrating_from_1.7.asciidoc163
-rw-r--r--docs/en/ranch/2.1/guide/migrating_from_1.7/index.html258
-rw-r--r--docs/en/ranch/2.1/guide/migrating_from_1.x.asciidoc70
-rw-r--r--docs/en/ranch/2.1/guide/migrating_from_1.x/index.html274
-rw-r--r--docs/en/ranch/2.1/guide/migrating_from_2.0.asciidoc70
-rw-r--r--docs/en/ranch/2.1/guide/migrating_from_2.0/index.html206
-rw-r--r--docs/en/ranch/2.1/guide/parsers.asciidoc (renamed from docs/en/ranch/1.5/guide/parsers.asciidoc)2
-rw-r--r--docs/en/ranch/2.1/guide/parsers/index.html (renamed from docs/en/ranch/1.5/guide/parsers/index.html)16
-rw-r--r--docs/en/ranch/2.1/guide/protocols.asciidoc113
-rw-r--r--docs/en/ranch/2.1/guide/protocols/index.html (renamed from docs/en/ranch/1.5/guide/protocols/index.html)77
-rw-r--r--docs/en/ranch/2.1/guide/ssl_auth.asciidoc (renamed from docs/en/ranch/1.5/guide/ssl_auth.asciidoc)6
-rw-r--r--docs/en/ranch/2.1/guide/ssl_auth/index.html (renamed from docs/en/ranch/1.5/guide/ssl_auth/index.html)22
-rw-r--r--docs/en/ranch/2.1/guide/transports.asciidoc (renamed from docs/en/ranch/1.5/guide/transports.asciidoc)48
-rw-r--r--docs/en/ranch/2.1/guide/transports/index.html (renamed from docs/en/ranch/1.5/guide/transports/index.html)42
-rw-r--r--docs/en/ranch/2.1/manual/index.html201
-rw-r--r--docs/en/ranch/2.1/manual/ranch.child_spec/index.html222
-rw-r--r--docs/en/ranch/2.1/manual/ranch.get_addr/index.html197
-rw-r--r--docs/en/ranch/2.1/manual/ranch.get_max_connections/index.html189
-rw-r--r--docs/en/ranch/2.1/manual/ranch.get_port/index.html187
-rw-r--r--docs/en/ranch/2.1/manual/ranch.get_protocol_options/index.html (renamed from docs/en/ranch/1.5/manual/index.html)57
-rw-r--r--docs/en/ranch/2.1/manual/ranch.get_status/index.html188
-rw-r--r--docs/en/ranch/2.1/manual/ranch.get_transport_options/index.html185
-rw-r--r--docs/en/ranch/2.1/manual/ranch.handshake/index.html211
-rw-r--r--docs/en/ranch/2.1/manual/ranch.handshake_cancel/index.html198
-rw-r--r--docs/en/ranch/2.1/manual/ranch.handshake_continue/index.html208
-rw-r--r--docs/en/ranch/2.1/manual/ranch.info/index.html248
-rw-r--r--docs/en/ranch/2.1/manual/ranch.procs/index.html196
-rw-r--r--docs/en/ranch/2.1/manual/ranch.recv_proxy_header/index.html206
-rw-r--r--docs/en/ranch/2.1/manual/ranch.remove_connection/index.html186
-rw-r--r--docs/en/ranch/2.1/manual/ranch.resume_listener/index.html192
-rw-r--r--docs/en/ranch/2.1/manual/ranch.set_max_connections/index.html194
-rw-r--r--docs/en/ranch/2.1/manual/ranch.set_protocol_options/index.html200
-rw-r--r--docs/en/ranch/2.1/manual/ranch.set_transport_options/index.html248
-rw-r--r--docs/en/ranch/2.1/manual/ranch.start_listener/index.html246
-rw-r--r--docs/en/ranch/2.1/manual/ranch.stop_listener/index.html189
-rw-r--r--docs/en/ranch/2.1/manual/ranch.suspend_listener/index.html193
-rw-r--r--docs/en/ranch/2.1/manual/ranch.wait_for_connections/index.html213
-rw-r--r--docs/en/ranch/2.1/manual/ranch/index.html338
-rw-r--r--docs/en/ranch/2.1/manual/ranch_app/index.html (renamed from docs/en/ranch/1.5/manual/ranch_app/index.html)49
-rw-r--r--docs/en/ranch/2.1/manual/ranch_protocol/index.html (renamed from docs/en/ranch/1.5/manual/ranch_protocol/index.html)51
-rw-r--r--docs/en/ranch/2.1/manual/ranch_proxy_header.header/index.html220
-rw-r--r--docs/en/ranch/2.1/manual/ranch_proxy_header.parse/index.html191
-rw-r--r--docs/en/ranch/2.1/manual/ranch_proxy_header.to_connection_info/index.html190
-rw-r--r--docs/en/ranch/2.1/manual/ranch_proxy_header/index.html276
-rw-r--r--docs/en/ranch/2.1/manual/ranch_ssl/index.html (renamed from docs/en/ranch/1.5/manual/ranch_ssl/index.html)178
-rw-r--r--docs/en/ranch/2.1/manual/ranch_tcp/index.html (renamed from docs/en/ranch/1.5/manual/ranch_tcp/index.html)99
-rw-r--r--docs/en/ranch/2.1/manual/ranch_transport.sendfile/index.html220
-rw-r--r--docs/en/ranch/2.1/manual/ranch_transport/index.html427
-rw-r--r--docs/index.html14
-rw-r--r--docs/index.xml695
-rw-r--r--donate/index.html68
-rw-r--r--erlanger-playbook/index.html68
-rw-r--r--index.html72
-rw-r--r--index.xml706
-rw-r--r--services/index.html68
-rw-r--r--sitemap.xml219
315 files changed, 11900 insertions, 1985 deletions
diff --git a/_build/Makefile b/_build/Makefile
index 10bf1cb1..4f23a200 100644
--- a/_build/Makefile
+++ b/_build/Makefile
@@ -75,7 +75,7 @@ docs-$1-$2: tmp/$1
printf "%s\n" "+++" "title = \"`sed 's/\(.\)/\U\1/' <<< $1` Function Reference\"" \
"project = \"$1\"" "version = \"$3\"" "doctype = \"manual\"" "+++" "" \
> content/docs/en/$1/$3/manual.asciidoc; \
- if [ "$1" = "cowboy" -o "$1" = "gun" -o "$1" = "cowlib" ] || [ "$1" = "ranch" -a "$3" = "1.6" ] || [ "$1" = "ranch" -a "$3" = "1.7" ] || [ "$1" = "ranch" -a "$3" = "1.8" ] || [ "$1" = "ranch" -a "$3" = "2.0" ]; then \
+ if [ "$1" = "cowboy" -o "$1" = "gun" -o "$1" = "cowlib" -o "$1" = "ranch" ]; then \
sed '1,/^$$$$/d' tmp/$1/doc/src/manual/$1_app.asciidoc \
| sed 's/link:man:\([a-z0-9_]*\)(7)/link:\1_app/g' \
| sed 's/\(link:man:[a-z0-9_]*\):/\1./g' \
@@ -96,7 +96,7 @@ docs-$1-$2: tmp/$1
echo "\"" >> content/docs/en/$1/$3/manual/`basename $$$$f`; \
echo "+++" >> content/docs/en/$1/$3/manual/`basename $$$$f`; \
echo >> content/docs/en/$1/$3/manual/`basename $$$$f`; \
- if [ "$1" = "cowboy" -o "$1" = "gun" -o "$1" = "cowlib" ] || [ "$1" = "ranch" -a "$3" = "1.6" ] || [ "$1" = "ranch" -a "$3" = "1.7" ] || [ "$1" = "ranch" -a "$3" = "2.0" ]; then \
+ if [ "$1" = "cowboy" -o "$1" = "gun" -o "$1" = "cowlib" -o "$1" = "ranch" ]; then \
sed '1,/^$$$$/d' $$$$f \
| sed 's/link:man:$1(7)/link:../g' \
| sed 's/\(link:man:[a-z0-9_]*\):/\1./g' \
diff --git a/_build/content/articles/ranch-2.1.0.asciidoc b/_build/content/articles/ranch-2.1.0.asciidoc
new file mode 100644
index 00000000..c653a516
--- /dev/null
+++ b/_build/content/articles/ranch-2.1.0.asciidoc
@@ -0,0 +1,45 @@
++++
+date = "2021-09-09T07:00:00+01:00"
+title = "Ranch 2.1"
+
++++
+
+Ranch `2.1.0` has been released!
+
+Ranch 2.1 adds counters for the number of connections
+accepted and terminated. They can be used to produce
+information about accept or shutdown rates or as a
+total number of connections handled by Ranch.
+
+Ranch 2.1 also adds an alarm around the number of
+active connections a connection supervisor handles.
+When that number is high it is now possible to
+automatically perform an action, such as logging
+or gracefully shutting down idle connections.
+
+Starting from Ranch 2.1 the `{inet_backend,socket}`
+option is accepted for TCP listeners. Ranch tests
+now also run with this option enabled. Note that
+there are known issues with the socket backend
+at this time.
+
+We are providing a
+https://github.com/juhlig/prometheus_ranch[Prometheus collector]
+as a separate project as well as a
+https://github.com/juhlig/prometheus_ranch/blob/master/dashboards/ranch-dashboard.json[Grafana dashboard].
+
+Thanks this time go to Jan Uhlig and Maria Scott
+for contributing the alarms and counters as well
+as other improvements that went into this release.
+
+Ranch 2.1 requires Erlang/OTP 22 or above and is tested and supported
+on Linux, FreeBSD, macOS and Windows.
+
+A complete list of changes can be found in the migration guide:
+https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_2.0/[Migrating from Ranch 2.0 to 2.1].
+
+You can donate to this project via
+https://github.com/sponsors/essen[GitHub Sponsors].
+
+As usual, feedback is appreciated, and issues or
+questions should be sent via Github tickets. Thanks!
diff --git a/_build/data/projects/ranch.toml b/_build/data/projects/ranch.toml
index d0e1e667..1897bbbc 100644
--- a/_build/data/projects/ranch.toml
+++ b/_build/data/projects/ranch.toml
@@ -3,8 +3,8 @@ catchphrase = "The holy cow of servers."
description = "Ranch is a socket acceptor pool for building awesome TCP and TLS servers."
name = "ranch"
repository = "https://github.com/ninenines/ranch"
-versions = ["2.0", "1.8", "1.7", "1.6", "1.5"]
-branches = ["2.0.0", "1.8.0", "1.7.1", "1.6.2", "1.5.0"]
+versions = ["2.1", "2.0", "1.8", "1.7", "1.6"]
+branches = ["master", "2.0.0", "1.8.0", "1.7.1", "1.6.2"]
has_source = true
has_guide = true
has_manual = true
diff --git a/articles/asciideck/index.html b/articles/asciideck/index.html
index 12febaa7..6113eb4f 100644
--- a/articles/asciideck/index.html
+++ b/articles/asciideck/index.html
@@ -110,6 +110,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/cowboy-2.0.0-pre.4/index.html b/articles/cowboy-2.0.0-pre.4/index.html
index 661ad860..12dba97a 100644
--- a/articles/cowboy-2.0.0-pre.4/index.html
+++ b/articles/cowboy-2.0.0-pre.4/index.html
@@ -129,6 +129,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/cowboy-2.0.0-rc.1/index.html b/articles/cowboy-2.0.0-rc.1/index.html
index 963a95db..5c1009cb 100644
--- a/articles/cowboy-2.0.0-rc.1/index.html
+++ b/articles/cowboy-2.0.0-rc.1/index.html
@@ -100,6 +100,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/cowboy-2.0.0-rc.2/index.html b/articles/cowboy-2.0.0-rc.2/index.html
index 26dafbd6..00a867b2 100644
--- a/articles/cowboy-2.0.0-rc.2/index.html
+++ b/articles/cowboy-2.0.0-rc.2/index.html
@@ -93,6 +93,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/cowboy-2.0.0/index.html b/articles/cowboy-2.0.0/index.html
index 65ee8fd1..ce16684a 100644
--- a/articles/cowboy-2.0.0/index.html
+++ b/articles/cowboy-2.0.0/index.html
@@ -99,6 +99,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/cowboy-2.1.0/index.html b/articles/cowboy-2.1.0/index.html
index 2687191e..092a2ce9 100644
--- a/articles/cowboy-2.1.0/index.html
+++ b/articles/cowboy-2.1.0/index.html
@@ -96,6 +96,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/cowboy-2.2.0/index.html b/articles/cowboy-2.2.0/index.html
index 8ab1c6ab..d5038ada 100644
--- a/articles/cowboy-2.2.0/index.html
+++ b/articles/cowboy-2.2.0/index.html
@@ -94,6 +94,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/cowboy-2.3.0/index.html b/articles/cowboy-2.3.0/index.html
index 884814c9..a6516b32 100644
--- a/articles/cowboy-2.3.0/index.html
+++ b/articles/cowboy-2.3.0/index.html
@@ -86,6 +86,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/cowboy-2.4.0/index.html b/articles/cowboy-2.4.0/index.html
index 3ab95c7d..f7a8b381 100644
--- a/articles/cowboy-2.4.0/index.html
+++ b/articles/cowboy-2.4.0/index.html
@@ -88,6 +88,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/cowboy-2.5.0/index.html b/articles/cowboy-2.5.0/index.html
index 76290089..40872f9c 100644
--- a/articles/cowboy-2.5.0/index.html
+++ b/articles/cowboy-2.5.0/index.html
@@ -92,6 +92,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/cowboy-2.6.0/index.html b/articles/cowboy-2.6.0/index.html
index 84be1fdd..33ef142f 100644
--- a/articles/cowboy-2.6.0/index.html
+++ b/articles/cowboy-2.6.0/index.html
@@ -89,6 +89,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/cowboy-2.7.0/index.html b/articles/cowboy-2.7.0/index.html
index 5caca916..14e30ab8 100644
--- a/articles/cowboy-2.7.0/index.html
+++ b/articles/cowboy-2.7.0/index.html
@@ -90,6 +90,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/cowboy-2.8.0/index.html b/articles/cowboy-2.8.0/index.html
index 9656ea1e..ca6d9303 100644
--- a/articles/cowboy-2.8.0/index.html
+++ b/articles/cowboy-2.8.0/index.html
@@ -89,6 +89,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/cowboy-2.9.0/index.html b/articles/cowboy-2.9.0/index.html
index 81799148..ff1e859c 100644
--- a/articles/cowboy-2.9.0/index.html
+++ b/articles/cowboy-2.9.0/index.html
@@ -88,6 +88,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/cowboy2-qs/index.html b/articles/cowboy2-qs/index.html
index 68bc2ece..d4d3d4d9 100644
--- a/articles/cowboy2-qs/index.html
+++ b/articles/cowboy2-qs/index.html
@@ -130,6 +130,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/dont-let-it-crash/index.html b/articles/dont-let-it-crash/index.html
index e43bd803..6456a49d 100644
--- a/articles/dont-let-it-crash/index.html
+++ b/articles/dont-let-it-crash/index.html
@@ -105,6 +105,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/erlang-meetup-10-septembre-2019/index.html b/articles/erlang-meetup-10-septembre-2019/index.html
index 8026768b..1f3b613a 100644
--- a/articles/erlang-meetup-10-septembre-2019/index.html
+++ b/articles/erlang-meetup-10-septembre-2019/index.html
@@ -85,6 +85,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/erlang-scalability/index.html b/articles/erlang-scalability/index.html
index 45303613..8f8c4574 100644
--- a/articles/erlang-scalability/index.html
+++ b/articles/erlang-scalability/index.html
@@ -117,6 +117,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/erlang-validate-utf8/index.html b/articles/erlang-validate-utf8/index.html
index db26c214..6e5055a4 100644
--- a/articles/erlang-validate-utf8/index.html
+++ b/articles/erlang-validate-utf8/index.html
@@ -233,6 +233,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/erlang.mk-and-relx/index.html b/articles/erlang.mk-and-relx/index.html
index 1278950a..76be0ae0 100644
--- a/articles/erlang.mk-and-relx/index.html
+++ b/articles/erlang.mk-and-relx/index.html
@@ -119,6 +119,10 @@ cowboy-0.8.5 erlydtl-0.7.0 ninenines-0.2.0 stdlib-1.19.1</pre></div></div>
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/erlanger-playbook-september-2015-update/index.html b/articles/erlanger-playbook-september-2015-update/index.html
index 9a24ec53..e3a8bf5a 100644
--- a/articles/erlanger-playbook-september-2015-update/index.html
+++ b/articles/erlanger-playbook-september-2015-update/index.html
@@ -88,6 +88,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/erlanger-playbook/index.html b/articles/erlanger-playbook/index.html
index 6d1caf8e..d474885b 100644
--- a/articles/erlanger-playbook/index.html
+++ b/articles/erlanger-playbook/index.html
@@ -129,6 +129,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/farwest-funded/index.html b/articles/farwest-funded/index.html
index 78c0ece5..023cfbe6 100644
--- a/articles/farwest-funded/index.html
+++ b/articles/farwest-funded/index.html
@@ -89,6 +89,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/github-sponsors/index.html b/articles/github-sponsors/index.html
index b6346072..e1a68111 100644
--- a/articles/github-sponsors/index.html
+++ b/articles/github-sponsors/index.html
@@ -86,6 +86,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/gun-1.0.0-rc.1/index.html b/articles/gun-1.0.0-rc.1/index.html
index 935f0060..8dd1349e 100644
--- a/articles/gun-1.0.0-rc.1/index.html
+++ b/articles/gun-1.0.0-rc.1/index.html
@@ -90,6 +90,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/gun-1.0.0/index.html b/articles/gun-1.0.0/index.html
index c9d4e6bb..9ecab618 100644
--- a/articles/gun-1.0.0/index.html
+++ b/articles/gun-1.0.0/index.html
@@ -89,6 +89,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/gun-1.2.0/index.html b/articles/gun-1.2.0/index.html
index fb2954f4..ec1648e3 100644
--- a/articles/gun-1.2.0/index.html
+++ b/articles/gun-1.2.0/index.html
@@ -89,6 +89,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/gun-1.3.0/index.html b/articles/gun-1.3.0/index.html
index bef45e1c..73388bcb 100644
--- a/articles/gun-1.3.0/index.html
+++ b/articles/gun-1.3.0/index.html
@@ -87,6 +87,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/gun-2.0.0-pre.1/index.html b/articles/gun-2.0.0-pre.1/index.html
index 778f8fab..f3d5b0d8 100644
--- a/articles/gun-2.0.0-pre.1/index.html
+++ b/articles/gun-2.0.0-pre.1/index.html
@@ -94,6 +94,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/gun-2.0.0-pre.2/index.html b/articles/gun-2.0.0-pre.2/index.html
index afd15322..ea034c97 100644
--- a/articles/gun-2.0.0-pre.2/index.html
+++ b/articles/gun-2.0.0-pre.2/index.html
@@ -92,6 +92,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/gun-2.0.0-rc.1/index.html b/articles/gun-2.0.0-rc.1/index.html
index 7cb1d335..33ef7f1f 100644
--- a/articles/gun-2.0.0-rc.1/index.html
+++ b/articles/gun-2.0.0-rc.1/index.html
@@ -97,6 +97,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/index.html b/articles/index.html
index c16218a8..782192bf 100644
--- a/articles/index.html
+++ b/articles/index.html
@@ -67,6 +67,24 @@
<article class="blog_item">
<header>
+ <h2><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></h2>
+ <p class="date">
+ <span class="year">2021</span>
+ <span class="day-month">09 Sep</span>
+ </p>
+ </header>
+
+ <p>Ranch 2.1.0 has been released!
+Ranch 2.1 adds counters for the number of connections accepted and terminated. They can be used to produce information about accept or shutdown rates or as a total number of connections handled by Ranch.
+Ranch 2.1 also adds an alarm around the number of active connections a connection supervisor handles. When that number is high it is now possible to automatically perform an action, such as logging or gracefully shutting down idle connections.</p>
+
+ <p style="text-align:right">
+ <a class="read_more" href="https://ninenines.eu/articles/ranch-2.1.0/">Read More</a>
+ </p>
+ </article>
+
+ <article class="blog_item">
+ <header>
<h2><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></h2>
<p class="date">
<span class="year">2021</span>
@@ -415,24 +433,6 @@ Note that it is currently not possible to tunnel a TLS connection via an HTTPS p
</p>
</article>
- <article class="blog_item">
- <header>
- <h2><a href="https://ninenines.eu/articles/ranch-1.6.0/">Ranch 1.6</a></h2>
- <p class="date">
- <span class="year">2018</span>
- <span class="day-month">01 Aug</span>
- </p>
- </header>
-
- <p>Ranch 1.6.0 has been released!
-This release sees the introduction of a suspend/resume mechanism for the listeners which makes the listener close the listening socket and stop accepting new connections. Existing connections continue uninterrupted.
-This can be used to update the socket options of the listener, or to implement a graceful shutdown. To that end a function has also been added which allows waiting until connections reach a certain number.</p>
-
- <p style="text-align:right">
- <a class="read_more" href="https://ninenines.eu/articles/ranch-1.6.0/">Read More</a>
- </p>
- </article>
-
<nav class="pagination" role="pagination">
diff --git a/articles/index.xml b/articles/index.xml
index a68b864e..575b231d 100644
--- a/articles/index.xml
+++ b/articles/index.xml
@@ -6,12 +6,23 @@
<description>Recent content in Articles on Nine Nines</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
- <lastBuildDate>Wed, 12 May 2021 07:00:00 +0100</lastBuildDate>
+ <lastBuildDate>Thu, 09 Sep 2021 07:00:00 +0100</lastBuildDate>
<atom:link href="https://ninenines.eu/articles/index.xml" rel="self" type="application/rss+xml" />
<item>
+ <title>Ranch 2.1</title>
+ <link>https://ninenines.eu/articles/ranch-2.1.0/</link>
+ <pubDate>Thu, 09 Sep 2021 07:00:00 +0100</pubDate>
+
+ <guid>https://ninenines.eu/articles/ranch-2.1.0/</guid>
+ <description>Ranch 2.1.0 has been released!
+Ranch 2.1 adds counters for the number of connections accepted and terminated. They can be used to produce information about accept or shutdown rates or as a total number of connections handled by Ranch.
+Ranch 2.1 also adds an alarm around the number of active connections a connection supervisor handles. When that number is high it is now possible to automatically perform an action, such as logging or gracefully shutting down idle connections.</description>
+ </item>
+
+ <item>
<title>Cowboy 2.9</title>
<link>https://ninenines.eu/articles/cowboy-2.9.0/</link>
<pubDate>Wed, 12 May 2021 07:00:00 +0100</pubDate>
diff --git a/articles/january-2014-status/index.html b/articles/january-2014-status/index.html
index 61a131b4..8bc8365e 100644
--- a/articles/january-2014-status/index.html
+++ b/articles/january-2014-status/index.html
@@ -115,6 +115,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/joe_the_rubber_duck/index.html b/articles/joe_the_rubber_duck/index.html
index 88b5ed6a..bba36632 100644
--- a/articles/joe_the_rubber_duck/index.html
+++ b/articles/joe_the_rubber_duck/index.html
@@ -89,6 +89,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/merry-christmas-2018/index.html b/articles/merry-christmas-2018/index.html
index e6ae800b..eb2849b3 100644
--- a/articles/merry-christmas-2018/index.html
+++ b/articles/merry-christmas-2018/index.html
@@ -96,6 +96,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/merry-christmas-2019/index.html b/articles/merry-christmas-2019/index.html
index 0eb48149..c7eed52c 100644
--- a/articles/merry-christmas-2019/index.html
+++ b/articles/merry-christmas-2019/index.html
@@ -92,6 +92,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/ml-archives/index.html b/articles/ml-archives/index.html
index 6b194dc6..297073a7 100644
--- a/articles/ml-archives/index.html
+++ b/articles/ml-archives/index.html
@@ -86,6 +86,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/on-open-source/index.html b/articles/on-open-source/index.html
index d4426b21..fee4b13e 100644
--- a/articles/on-open-source/index.html
+++ b/articles/on-open-source/index.html
@@ -98,6 +98,10 @@ much left to look at today</a>. This was followed by a <a href="https://github.c
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/page/2/index.html b/articles/page/2/index.html
index ab1e37c5..1765d157 100644
--- a/articles/page/2/index.html
+++ b/articles/page/2/index.html
@@ -67,6 +67,24 @@
<article class="blog_item">
<header>
+ <h2><a href="https://ninenines.eu/articles/ranch-1.6.0/">Ranch 1.6</a></h2>
+ <p class="date">
+ <span class="year">2018</span>
+ <span class="day-month">01 Aug</span>
+ </p>
+ </header>
+
+ <p>Ranch 1.6.0 has been released!
+This release sees the introduction of a suspend/resume mechanism for the listeners which makes the listener close the listening socket and stop accepting new connections. Existing connections continue uninterrupted.
+This can be used to update the socket options of the listener, or to implement a graceful shutdown. To that end a function has also been added which allows waiting until connections reach a certain number.</p>
+
+ <p style="text-align:right">
+ <a class="read_more" href="https://ninenines.eu/articles/ranch-1.6.0/">Read More</a>
+ </p>
+ </article>
+
+ <article class="blog_item">
+ <header>
<h2><a href="https://ninenines.eu/articles/gun-1.0.0/">Gun 1.0</a></h2>
<p class="date">
<span class="year">2018</span>
@@ -416,22 +434,6 @@ When looking into why the permessage-deflate tests in autobahntestsuite were tak
</p>
</article>
- <article class="blog_item">
- <header>
- <h2><a href="https://ninenines.eu/articles/on-open-source/">On open source</a></h2>
- <p class="date">
- <span class="year">2014</span>
- <span class="day-month">05 Sep</span>
- </p>
- </header>
-
- <p>Last week I read a great article on contributing to open source by Alvaro Videla. He makes many great points and I am in agreement with most of it. This made me want to properly explain my point of view with regard to open source and contributions. Unlike most open source evangelism articles I will not talk about ideals or any of that crap, but rather my personal feelings and experience.</p>
-
- <p style="text-align:right">
- <a class="read_more" href="https://ninenines.eu/articles/on-open-source/">Read More</a>
- </p>
- </article>
-
<nav class="pagination" role="pagination">
diff --git a/articles/page/3/index.html b/articles/page/3/index.html
index 764ca8a9..901c551d 100644
--- a/articles/page/3/index.html
+++ b/articles/page/3/index.html
@@ -67,6 +67,22 @@
<article class="blog_item">
<header>
+ <h2><a href="https://ninenines.eu/articles/on-open-source/">On open source</a></h2>
+ <p class="date">
+ <span class="year">2014</span>
+ <span class="day-month">05 Sep</span>
+ </p>
+ </header>
+
+ <p>Last week I read a great article on contributing to open source by Alvaro Videla. He makes many great points and I am in agreement with most of it. This made me want to properly explain my point of view with regard to open source and contributions. Unlike most open source evangelism articles I will not talk about ideals or any of that crap, but rather my personal feelings and experience.</p>
+
+ <p style="text-align:right">
+ <a class="read_more" href="https://ninenines.eu/articles/on-open-source/">Read More</a>
+ </p>
+ </article>
+
+ <article class="blog_item">
+ <header>
<h2><a href="https://ninenines.eu/articles/the-story-so-far/">The story so far</a></h2>
<p class="date">
<span class="year">2014</span>
diff --git a/articles/ranch-1.3/index.html b/articles/ranch-1.3/index.html
index ef2ae058..9d3a2a34 100644
--- a/articles/ranch-1.3/index.html
+++ b/articles/ranch-1.3/index.html
@@ -127,6 +127,10 @@ Primary key fingerprint<font color="#990000">:</font> F19F 189C ECC7 <font color
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/ranch-1.6.0/index.html b/articles/ranch-1.6.0/index.html
index c0d17c6b..e5a59c43 100644
--- a/articles/ranch-1.6.0/index.html
+++ b/articles/ranch-1.6.0/index.html
@@ -89,6 +89,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/ranch-1.7.0/index.html b/articles/ranch-1.7.0/index.html
index 674eae94..3edaae2e 100644
--- a/articles/ranch-1.7.0/index.html
+++ b/articles/ranch-1.7.0/index.html
@@ -88,6 +88,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/ranch-2.0.0-rc.1/index.html b/articles/ranch-2.0.0-rc.1/index.html
index 13b59026..c85ac01b 100644
--- a/articles/ranch-2.0.0-rc.1/index.html
+++ b/articles/ranch-2.0.0-rc.1/index.html
@@ -97,6 +97,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/ranch-2.0.0/index.html b/articles/ranch-2.0.0/index.html
index fee08322..9a0c4d87 100644
--- a/articles/ranch-2.0.0/index.html
+++ b/articles/ranch-2.0.0/index.html
@@ -96,6 +96,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/ranch-2.1.0/index.html b/articles/ranch-2.1.0/index.html
new file mode 100644
index 00000000..70e058d8
--- /dev/null
+++ b/articles/ranch-2.1.0/index.html
@@ -0,0 +1,344 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: Ranch 2.1</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li class="active"><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents">
+<div class="container">
+<div class="row">
+<div class="span9 maincol">
+
+<article class="blog_item">
+<header>
+ <h1 class="lined-header"><span>Ranch 2.1</span></h1>
+ <p class="date">
+ <span class="year">2021</span>
+ <span class="day-month">09 Sep</span>
+ </p>
+</header>
+
+<p>Ranch <code>2.1.0</code> has been released!</p>
+<p>Ranch 2.1 adds counters for the number of connections accepted and terminated. They can be used to produce information about accept or shutdown rates or as a total number of connections handled by Ranch.</p>
+<p>Ranch 2.1 also adds an alarm around the number of active connections a connection supervisor handles. When that number is high it is now possible to automatically perform an action, such as logging or gracefully shutting down idle connections.</p>
+<p>Starting from Ranch 2.1 the <code>{inet_backend,socket}</code> option is accepted for TCP listeners. Ranch tests now also run with this option enabled. Note that there are known issues with the socket backend at this time.</p>
+<p>We are providing a <a href="https://github.com/juhlig/prometheus_ranch">Prometheus collector</a> as a separate project as well as a <a href="https://github.com/juhlig/prometheus_ranch/blob/master/dashboards/ranch-dashboard.json">Grafana dashboard</a>.</p>
+<p>Thanks this time go to Jan Uhlig and Maria Scott for contributing the alarms and counters as well as other improvements that went into this release.</p>
+<p>Ranch 2.1 requires Erlang/OTP 22 or above and is tested and supported on Linux, FreeBSD, macOS and Windows.</p>
+<p>A complete list of changes can be found in the migration guide: <a href="https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_2.0/">Migrating from Ranch 2.0 to 2.1</a>.</p>
+<p>You can donate to this project via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>.</p>
+<p>As usual, feedback is appreciated, and issues or questions should be sent via Github tickets. Thanks!</p>
+
+
+</article>
+</div>
+
+<div class="span3 sidecol">
+<h3>More articles</h3>
+<ul id="articles-nav" class="extra_margin">
+
+
+
+
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-rc.1/">Gun 2.0 release candidate 1</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/ranch-2.0.0/">Ranch 2.0</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.8.0/">Cowboy 2.8</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/the-gateway-trilogy/">The Gateway Trilogy</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/merry-christmas-2019/">Merry Christmas 2019: New Beginnings</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/github-sponsors/">GitHub Sponsors</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.7.0/">Cowboy 2.7</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.1/">Gun 2.0 pre-release 1</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/ranch-2.0.0-rc.1/">Ranch 2.0 release candidate 1</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/joe_the_rubber_duck/">Joe Armstrong the rubber duck</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/merry-christmas-2018/">Merry Christmas 2018: A Recap</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.6.0/">Cowboy 2.6</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/ranch-1.7.0/">Ranch 1.7</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.5.0/">Cowboy 2.5</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/gun-1.3.0/">Gun 1.3</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/gun-1.2.0/">Gun 1.2</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/ranch-1.6.0/">Ranch 1.6</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/gun-1.0.0/">Gun 1.0</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/asciideck/">Asciideck: Asciidoc for Erlang</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/gun-1.0.0-rc.1/">Gun 1.0 release candidate 1</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.4.0/">Cowboy 2.4</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.3.0/">Cowboy 2.3</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.2.0/">Cowboy 2.2</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.1.0/">Cowboy 2.1</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.0.0/">Cowboy 2.0</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-rc.2/">Cowboy 2.0 release candidate 2</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-rc.1/">Cowboy 2.0 release candidate 1</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/the-elephant-in-the-room/">The elephant in the room</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/dont-let-it-crash/">Don&#39;t let it crash</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-pre.4/">Cowboy 2.0 pre-release 4</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/ranch-1.3/">Ranch 1.3</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/ml-archives/">Mailing list archived</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/website-update/">Website update</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/erlang-validate-utf8/">Validating UTF-8 binaries with Erlang</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/on-open-source/">On open source</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/the-story-so-far/">The story so far</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/cowboy2-qs/">Cowboy 2.0 and query strings</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/january-2014-status/">January 2014 status</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/farwest-funded/">Farwest got funded!</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/erlang.mk-and-relx/">Build Erlang releases with Erlang.mk and Relx</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/xerl-0.5-intermediate-module/">Xerl: intermediate module</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/xerl-0.4-expression-separator/">Xerl: expression separator</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/erlang-scalability/">Erlang Scalability</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/xerl-0.3-atomic-expressions/">Xerl: atomic expressions</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/xerl-0.2-two-modules/">Xerl: two modules</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/xerl-0.1-empty-modules/">Xerl: empty modules</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/ranch-ftp/">Build an FTP Server with Ranch in 30 Minutes</a></li>
+
+
+
+ <li><a href="https://ninenines.eu/articles/tictactoe/">Erlang Tic Tac Toe</a></li>
+
+
+</ul>
+
+<h3>Feedback</h3>
+<p>Feel free to <a href="mailto:[email protected]">email us</a>
+if you found any mistake or need clarification on any of the
+articles.</p>
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
diff --git a/articles/ranch-ftp/index.html b/articles/ranch-ftp/index.html
index 3849aa12..d78c66bc 100644
--- a/articles/ranch-ftp/index.html
+++ b/articles/ranch-ftp/index.html
@@ -229,6 +229,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/the-elephant-in-the-room/index.html b/articles/the-elephant-in-the-room/index.html
index d28e300e..3496ce5f 100644
--- a/articles/the-elephant-in-the-room/index.html
+++ b/articles/the-elephant-in-the-room/index.html
@@ -111,6 +111,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/the-gateway-trilogy/index.html b/articles/the-gateway-trilogy/index.html
index fcb06d9c..f895c32d 100644
--- a/articles/the-gateway-trilogy/index.html
+++ b/articles/the-gateway-trilogy/index.html
@@ -86,6 +86,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/the-story-so-far/index.html b/articles/the-story-so-far/index.html
index af1c3d47..e2041fb0 100644
--- a/articles/the-story-so-far/index.html
+++ b/articles/the-story-so-far/index.html
@@ -102,6 +102,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/tictactoe/index.html b/articles/tictactoe/index.html
index 55125b7d..627ed6f8 100644
--- a/articles/tictactoe/index.html
+++ b/articles/tictactoe/index.html
@@ -134,6 +134,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/website-update/index.html b/articles/website-update/index.html
index 65146ea5..e98048a0 100644
--- a/articles/website-update/index.html
+++ b/articles/website-update/index.html
@@ -91,6 +91,10 @@
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/xerl-0.1-empty-modules/index.html b/articles/xerl-0.1-empty-modules/index.html
index 787b38b7..df2278d4 100644
--- a/articles/xerl-0.1-empty-modules/index.html
+++ b/articles/xerl-0.1-empty-modules/index.html
@@ -169,6 +169,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/xerl-0.2-two-modules/index.html b/articles/xerl-0.2-two-modules/index.html
index 52436249..5419af99 100644
--- a/articles/xerl-0.2-two-modules/index.html
+++ b/articles/xerl-0.2-two-modules/index.html
@@ -197,6 +197,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/xerl-0.3-atomic-expressions/index.html b/articles/xerl-0.3-atomic-expressions/index.html
index 5a7d6bf4..d43074d9 100644
--- a/articles/xerl-0.3-atomic-expressions/index.html
+++ b/articles/xerl-0.3-atomic-expressions/index.html
@@ -166,6 +166,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/xerl-0.4-expression-separator/index.html b/articles/xerl-0.4-expression-separator/index.html
index 6f744580..6029495e 100644
--- a/articles/xerl-0.4-expression-separator/index.html
+++ b/articles/xerl-0.4-expression-separator/index.html
@@ -118,6 +118,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/articles/xerl-0.5-intermediate-module/index.html b/articles/xerl-0.5-intermediate-module/index.html
index f92a5698..47098427 100644
--- a/articles/xerl-0.5-intermediate-module/index.html
+++ b/articles/xerl-0.5-intermediate-module/index.html
@@ -162,6 +162,10 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li>
+
+
+
<li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li>
diff --git a/docs/en/gun/2.0/guide/migrating_from_1.3.asciidoc b/docs/en/gun/2.0/guide/migrating_from_1.3.asciidoc
index 2ad4a808..2e71a904 100644
--- a/docs/en/gun/2.0/guide/migrating_from_1.3.asciidoc
+++ b/docs/en/gun/2.0/guide/migrating_from_1.3.asciidoc
@@ -12,6 +12,10 @@ Gun 2.0 adds many more features such as Websocket over
HTTP/2, a built-in cookie store, graceful shutdown, flow
control for data messages, event handlers and more.
+Gun 2.0 also introduces an experimental pool module that
+automatically maintains connections and routes requests
+to the right process, in a similar way as browsers do.
+
Gun 2.0 greatly improves the HTTP/2 performance when it
comes to receiving large response bodies; and when receiving
response bodies from many separate requests concurrently.
@@ -135,7 +139,20 @@ Gun 2.0 requires Erlang/OTP 22.0 or greater.
(for example during state transitions when switching
protocols or connecting to proxies).
-* Update Cowlib to 2.10.1.
+* Update Cowlib to 2.11.0.
+
+=== Experimental features added
+
+* The `gun_pool` module was introduced. Its interface
+ is very similar to the `gun` module, but as it is an
+ experimental feature, it has not been documented yet.
+ The intent is to obtain feedback and document it in
+ an upcoming minor release. Pools are created for each
+ authority (host/port) and scope (user-defined value)
+ pairs and are resolved accordingly using the information
+ provided in the request and request options. Connections
+ may concurrently handle multiple requests/responses
+ from as many different processes as required.
=== Features removed
diff --git a/docs/en/gun/2.0/guide/migrating_from_1.3/index.html b/docs/en/gun/2.0/guide/migrating_from_1.3/index.html
index cfd61c66..e0af6714 100644
--- a/docs/en/gun/2.0/guide/migrating_from_1.3/index.html
+++ b/docs/en/gun/2.0/guide/migrating_from_1.3/index.html
@@ -64,6 +64,7 @@
<p>Gun 2.0 includes state of the art tunnel support. With Gun 2.0 it is possible to make requests or data go through any number of proxy endpoints using any combination of TCP or TLS transports and HTTP/1.1, HTTP/2 or SOCKS5 protocols. All combinations of the scenario Proxy1 -&gt; Proxy2 -&gt; Origin are tested and known to work.</p>
<p>Gun 2.0 adds many more features such as Websocket over HTTP/2, a built-in cookie store, graceful shutdown, flow control for data messages, event handlers and more.</p>
+<p>Gun 2.0 also introduces an experimental pool module that automatically maintains connections and routes requests to the right process, in a similar way as browsers do.</p>
<p>Gun 2.0 greatly improves the HTTP/2 performance when it comes to receiving large response bodies; and when receiving response bodies from many separate requests concurrently.</p>
<p>Gun now shares much of its HTTP/2 code with Cowboy, including the HTTP/2 state machine. Numerous issues were fixed as a result because the Cowboy implementation was much more advanced.</p>
<p>The Gun connection process is now implemented using <code>gen_statem</code>.</p>
@@ -111,7 +112,11 @@
</li>
<li>Many improvements have been done to postpone or reject requests and other operations while in the wrong state (for example during state transitions when switching protocols or connecting to proxies).
</li>
-<li>Update Cowlib to 2.10.1.
+<li>Update Cowlib to 2.11.0.
+</li>
+</ul>
+<h2 id="_experimental_features_added">Experimental features added</h2>
+<ul><li>The <code>gun_pool</code> module was introduced. Its interface is very similar to the <code>gun</code> module, but as it is an experimental feature, it has not been documented yet. The intent is to obtain feedback and document it in an upcoming minor release. Pools are created for each authority (host/port) and scope (user-defined value) pairs and are resolved accordingly using the information provided in the request and request options. Connections may concurrently handle multiple requests/responses from as many different processes as required.
</li>
</ul>
<h2 id="_features_removed">Features removed</h2>
diff --git a/docs/en/ranch/1.5/guide/embedded.asciidoc b/docs/en/ranch/1.5/guide/embedded.asciidoc
deleted file mode 100644
index 55c018b1..00000000
--- a/docs/en/ranch/1.5/guide/embedded.asciidoc
+++ /dev/null
@@ -1,48 +0,0 @@
-== Embedded mode
-
-Embedded mode allows you to insert Ranch listeners directly
-in your supervision tree. This allows for greater fault tolerance
-control by permitting the shutdown of a listener due to the
-failure of another part of the application and vice versa.
-
-=== Embedding
-
-To embed Ranch in your application you can simply add the child specs
-to your supervision tree. This can all be done in the `init/1` function
-of one of your application supervisors.
-
-Ranch requires at the minimum two kinds of child specs for embedding.
-First, you need to add `ranch_sup` to your supervision tree, only once,
-regardless of the number of listeners you will use. Then you need to
-add the child specs for each listener.
-
-Ranch has a convenience function for getting the listeners child specs
-called `ranch:child_spec/5`, that works like `ranch:start_listener/5`,
-except that it doesn't start anything, it only returns child specs.
-
-As for `ranch_sup`, the child spec is simple enough to not require a
-convenience function.
-
-The following example adds both `ranch_sup` and one listener to another
-application's supervision tree.
-
-.Embed Ranch directly in your supervision tree
-
-[source,erlang]
-----
-init([]) ->
- RanchSupSpec = {ranch_sup, {ranch_sup, start_link, []},
- permanent, 5000, supervisor, [ranch_sup]},
- ListenerSpec = ranch:child_spec(echo, 100,
- ranch_tcp, [{port, 5555}],
- echo_protocol, []
- ),
- {ok, {{one_for_one, 10, 10}, [RanchSupSpec, ListenerSpec]}}.
-----
-
-Remember, you can add as many listener child specs as needed, but only
-one `ranch_sup` spec!
-
-It is recommended that your architecture makes sure that all listeners
-are restarted if `ranch_sup` fails. See the Ranch internals chapter for
-more details on how Ranch does it.
diff --git a/docs/en/ranch/1.5/guide/protocols.asciidoc b/docs/en/ranch/1.5/guide/protocols.asciidoc
deleted file mode 100644
index b9a31f27..00000000
--- a/docs/en/ranch/1.5/guide/protocols.asciidoc
+++ /dev/null
@@ -1,99 +0,0 @@
-== Protocols
-
-A protocol handler starts a connection process and defines the
-protocol logic executed in this process.
-
-=== Writing a protocol handler
-
-All protocol handlers must implement the `ranch_protocol` behavior
-which defines a single callback, `start_link/4`. This callback is
-responsible for spawning a new process for handling the connection.
-It receives four arguments: the name of the listener, the socket, the
-transport handler being used and the protocol options defined in
-the call to `ranch:start_listener/5`. This callback must
-return `{ok, Pid}`, with `Pid` the pid of the new process.
-
-The newly started process can then freely initialize itself. However,
-it must call `ranch:accept_ack/1` before doing any socket operation.
-This will ensure the connection process is the owner of the socket.
-It expects the listener's name as argument.
-
-.Acknowledge accepting the socket
-
-[source,erlang]
-ok = ranch:accept_ack(Ref).
-
-If your protocol code requires specific socket options, you should
-set them while initializing your connection process, after
-calling `ranch:accept_ack/1`. You can use `Transport:setopts/2`
-for that purpose.
-
-Following is the complete protocol code for the example found
-in `examples/tcp_echo/`.
-
-.Protocol module that echoes everything it receives
-
-[source,erlang]
-----
--module(echo_protocol).
--behaviour(ranch_protocol).
-
--export([start_link/4]).
--export([init/4]).
-
-start_link(Ref, Socket, Transport, Opts) ->
- Pid = spawn_link(?MODULE, init, [Ref, Socket, Transport, Opts]),
- {ok, Pid}.
-
-init(Ref, Socket, Transport, _Opts = []) ->
- ok = ranch:accept_ack(Ref),
- loop(Socket, Transport).
-
-loop(Socket, Transport) ->
- case Transport:recv(Socket, 0, 5000) of
- {ok, Data} ->
- Transport:send(Socket, Data),
- loop(Socket, Transport);
- _ ->
- ok = Transport:close(Socket)
- end.
-----
-
-=== Using gen_server
-
-Special processes like the ones that use the `gen_server` or `gen_fsm`
-behaviours have the particularity of having their `start_link` call not
-return until the `init` function returns. This is problematic, because
-you won't be able to call `ranch:accept_ack/1` from the `init` callback
-as this would cause a deadlock to happen.
-
-Use the `gen_server:enter_loop/3` function. It allows you to start your process
-normally (although it must be started with `proc_lib` like all special
-processes), then perform any needed operations before falling back into
-the normal `gen_server` execution loop.
-
-.Use a gen_server for protocol handling
-
-[source,erlang]
-----
--module(my_protocol).
--behaviour(gen_server).
--behaviour(ranch_protocol).
-
--export([start_link/4]).
--export([init/1]).
-%% Exports of other gen_server callbacks here.
-
-start_link(Ref, Socket, Transport, Opts) ->
- {ok, proc_lib:spawn_link(?MODULE, init, [{Ref, Socket, Transport, Opts}])}.
-
-init({Ref, Socket, Transport, _Opts = []}) ->
- %% Perform any required state initialization here.
- ok = ranch:accept_ack(Ref),
- ok = Transport:setopts(Socket, [{active, once}]),
- gen_server:enter_loop(?MODULE, [], {state, Socket, Transport}).
-
-%% Other gen_server callbacks here.
-----
-
-Check the `tcp_reverse` example for a complete example.
diff --git a/docs/en/ranch/1.5/manual/ranch/index.html b/docs/en/ranch/1.5/manual/ranch/index.html
deleted file mode 100644
index d4f19adb..00000000
--- a/docs/en/ranch/1.5/manual/ranch/index.html
+++ /dev/null
@@ -1,382 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
-
- <title>Nine Nines: ranch(3)</title>
-
- <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
- <link href="/css/99s.css?r=7" rel="stylesheet">
-
- <link rel="shortcut icon" href="/img/ico/favicon.ico">
- <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
- <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
- <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
-
-
-</head>
-
-
-<body class="">
- <header id="page-head">
- <div id="topbar" class="container">
- <div class="row">
- <div class="span2">
- <h1 id="logo"><a href="/" title="99s">99s</a></h1>
- </div>
- <div class="span10">
-
- <div id="side-header">
- <nav>
- <ul>
- <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
- <li><a title="Watch my talks" href="/talks">Talks</a></li>
- <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
- <li><a title="Request my services" href="/services">Consulting & Training</a></li>
- </ul>
- </nav>
- <ul id="social">
- <li>
- <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
- </li>
- <li>
- <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
- </li>
- </ul>
- </div>
- </div>
- </div>
- </div>
-
-
-</header>
-
-<div id="contents" class="two_col">
-<div class="container">
-<div class="row">
-<div id="docs" class="span9 maincol">
-
-<h1 class="lined-header"><span>ranch(3)</span></h1>
-
-<h2 id="_name">Name</h2>
-<p>ranch - socket acceptor pool</p>
-<h2 id="_description">Description</h2>
-<p>The <code>ranch</code> module provides functions for starting and manipulating Ranch listeners.</p>
-<h2 id="_types">Types</h2>
-<h3 id="_max_conns_____non_neg_integer_____infinity">max_conns() = non_neg_integer() | infinity</h3>
-<p>Maximum number of connections allowed on this listener.</p>
-<p>This is a soft limit. The actual number of connections might be slightly above the limit due to concurrency when accepting new connections. Some connections may also be removed from this count explicitly by the user code.</p>
-<h3 id="_opt">opt()</h3>
-<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><tt><b><font color="#000000">opt</font></b>() <font color="#990000">=</font> {<font color="#FF6600">ack_timeout</font>, <b><font color="#000000">timeout</font></b>()}
- | {<font color="#FF6600">connection_type</font>, <font color="#FF6600">worker</font> | <font color="#FF6600">supervisor</font>}
- | {<font color="#FF6600">max_connections</font>, <b><font color="#000000">max_conns</font></b>()}
- | {<font color="#FF6600">num_acceptors</font>, <b><font color="#000000">pos_integer</font></b>()}
- | {<font color="#000080">shutdown</font>, <b><font color="#000000">timeout</font></b>() | <font color="#FF6600">brutal_kill</font>}
- | {<font color="#FF6600">socket</font>, <b><font color="#000000">any</font></b>()}</tt></pre>
-</div></div>
-<p>Ranch-specific transport options.</p>
-<p>These options are not passed on to the transports. They are used by Ranch while setting up the listeners.</p>
-<h3 id="_ref_____any">ref() = any()</h3>
-<p>Unique name used to refer to a listener.</p>
-<h2 id="_option_descriptions">Option descriptions</h2>
-<p>None of the options are required.</p>
-<dl><dt>ack_timeout (5000)</dt>
-<dd><p>Maximum allowed time for the <code>ranch:accept_ack/1</code> call to finish.</p>
-</dd>
-<dt>connection_type (worker)</dt>
-<dd><p>Type of process that will handle the connection.</p>
-</dd>
-<dt>max_connections (1024)</dt>
-<dd><p>Maximum number of active connections. Soft limit. Using <code>infinity</code> will disable the limit entirely.</p>
-</dd>
-<dt>num_acceptors (10)</dt>
-<dd><p>Number of processes that accept connections.</p>
-</dd>
-<dt>shutdown (5000)</dt>
-<dd><p>Maximum allowed time for children to stop on listener shutdown.</p>
-</dd>
-<dt>socket</dt>
-<dd><p>Listening socket opened externally to be used instead of calling <code>Transport:listen/1</code>.</p>
-</dd>
-</dl>
-<h2 id="_exports">Exports</h2>
-<h3 id="_accept_ack_ref_____ok">accept_ack(Ref) -&gt; ok</h3>
-<dl><dt>Ref = ref()</dt>
-<dd><p>Listener name.</p>
-</dd>
-</dl>
-<p>Acknowledge that the connection is accepted.</p>
-<p>This function MUST be used by a connection process to inform Ranch that it initialized properly and let it perform any additional operations before the socket can be safely used.</p>
-<h3 id="_child_spec_ref__numacceptors__transport__transopts__protocol__protoopts_____supervisor_child_spec">child_spec(Ref, NumAcceptors, Transport, TransOpts, Protocol, ProtoOpts) -&gt; supervisor:child_spec()</h3>
-<dl><dt>Ref = ref()</dt>
-<dd><p>Listener name.</p>
-</dd>
-<dt>NumAcceptors = non_neg_integer()</dt>
-<dd><p>Number of acceptor processes.</p>
-</dd>
-<dt>Transport = module()</dt>
-<dd><p>Transport module.</p>
-</dd>
-<dt>TransOpts = any()</dt>
-<dd><p>Transport options.</p>
-</dd>
-<dt>Protocol = module()</dt>
-<dd><p>Protocol module.</p>
-</dd>
-<dt>ProtoOpts = any()</dt>
-<dd><p>Protocol options.</p>
-</dd>
-</dl>
-<p>Return child specifications for a new listener.</p>
-<p>This function can be used to embed a listener directly in an application instead of letting Ranch handle it.</p>
-<h3 id="_get_addr_ref______ip__port">get_addr(Ref) -&gt; {IP, Port}</h3>
-<dl><dt>Ref = ref()</dt>
-<dd><p>Listener name.</p>
-</dd>
-<dt>IP = inet:ip_address()</dt>
-<dd><p>IP of the interface used by this listener.</p>
-</dd>
-<dt>Port = inet:port_number()</dt>
-<dd><p>Port number used by this listener.</p>
-</dd>
-</dl>
-<p>Return the IP address and port for the given listener.</p>
-<h3 id="_get_max_connections_ref_____maxconns">get_max_connections(Ref) -&gt; MaxConns</h3>
-<dl><dt>Ref = ref()</dt>
-<dd><p>Listener name.</p>
-</dd>
-<dt>MaxConns = max_conns()</dt>
-<dd><p>Current maximum number of connections.</p>
-</dd>
-</dl>
-<p>Return the max number of connections allowed for the given listener.</p>
-<h3 id="_get_port_ref_____port">get_port(Ref) -&gt; Port</h3>
-<dl><dt>Ref = ref()</dt>
-<dd><p>Listener name.</p>
-</dd>
-<dt>Port = inet:port_number()</dt>
-<dd><p>Port number used by this listener.</p>
-</dd>
-</dl>
-<p>Return the port for the given listener.</p>
-<h3 id="_get_protocol_options_ref_____protoopts">get_protocol_options(Ref) -&gt; ProtoOpts</h3>
-<dl><dt>Ref = ref()</dt>
-<dd><p>Listener name.</p>
-</dd>
-<dt>ProtoOpts = any()</dt>
-<dd><p>Current protocol options.</p>
-</dd>
-</dl>
-<p>Return the protocol options set for the given listener.</p>
-<h3 id="_info________ref____key__value">info() -&gt; [{Ref, [{Key, Value}]}]</h3>
-<dl><dt>Ref = ref()</dt>
-<dd><p>Listener name.</p>
-</dd>
-<dt>Key = atom()</dt>
-<dd><p>Information key.</p>
-</dd>
-<dt>Value = any()</dt>
-<dd><p>Information value.</p>
-</dd>
-</dl>
-<p>Return detailed information about all Ranch listeners.</p>
-<p>The following keys are defined:</p>
-<dl><dt>pid</dt>
-<dd><p>Pid of the listener&apos;s top-level supervisor.</p>
-</dd>
-<dt>ip</dt>
-<dd><p>Interface Ranch listens on.</p>
-</dd>
-<dt>port</dt>
-<dd><p>Port number Ranch listens on.</p>
-</dd>
-<dt>num_acceptors</dt>
-<dd><p>Number of acceptor processes.</p>
-</dd>
-<dt>max_connections</dt>
-<dd><p>Maximum number of connections.</p>
-</dd>
-<dt>active_connections</dt>
-<dd><p>Number of active connections.</p>
-</dd>
-<dt>all_connections</dt>
-<dd><p>Number of connections, including those removed from the count.</p>
-</dd>
-<dt>transport</dt>
-<dd><p>Transport module.</p>
-</dd>
-<dt>transport_options</dt>
-<dd><p>Transport options.</p>
-</dd>
-<dt>protocol</dt>
-<dd><p>Protocol module.</p>
-</dd>
-<dt>protocol_options</dt>
-<dd><p>Protocol options.</p>
-</dd>
-</dl>
-<h3 id="_procs_ref__acceptors___connections______pid">procs(Ref, acceptors | connections) -&gt; [pid()]</h3>
-<dl><dt>Ref = ref()</dt>
-<dd><p>Listener name.</p>
-</dd>
-</dl>
-<p>Return all acceptor or connection processes for one listener.</p>
-<h3 id="_remove_connection_ref_____ok">remove_connection(Ref) -&gt; ok</h3>
-<dl><dt>Ref = ref()</dt>
-<dd><p>Listener name.</p>
-</dd>
-</dl>
-<p>Do not count this connection when limiting the number of connections.</p>
-<p>You can use this function for long-running connection processes which spend most of their time idling rather than consuming resources. This allows Ranch to accept a lot more connections without sacrificing the latency of the system.</p>
-<p>This function may only be called from a connection process.</p>
-<h3 id="_set_max_connections_ref__maxconns_____ok">set_max_connections(Ref, MaxConns) -&gt; ok</h3>
-<dl><dt>Ref = ref()</dt>
-<dd><p>Listener name.</p>
-</dd>
-<dt>MaxConns = max_conns()</dt>
-<dd><p>New maximum number of connections.</p>
-</dd>
-</dl>
-<p>Set the max number of connections for the given listener.</p>
-<p>The change will be applied immediately. If the new value is smaller than the previous one, Ranch will not kill the extra connections, but will wait for them to terminate properly.</p>
-<h3 id="_set_protocol_options_ref__protoopts_____ok">set_protocol_options(Ref, ProtoOpts) -&gt; ok</h3>
-<dl><dt>Ref = ref()</dt>
-<dd><p>Listener name.</p>
-</dd>
-<dt>ProtoOpts = any()</dt>
-<dd><p>New protocol options.</p>
-</dd>
-</dl>
-<p>Set the protocol options for the given listener.</p>
-<p>The change will be applied immediately for all new connections. Old connections will not receive the new options.</p>
-<h3 id="_start_listener_ref__numacceptors__transport__transopts__protocol__protoopts______ok__pid_______error__badarg">start_listener(Ref, NumAcceptors, Transport, TransOpts, Protocol, ProtoOpts) -&gt; {ok, pid()} | {error, badarg}</h3>
-<dl><dt>Ref = ref()</dt>
-<dd><p>Listener name.</p>
-</dd>
-<dt>NumAcceptors = non_neg_integer()</dt>
-<dd><p>Number of acceptor processes.</p>
-</dd>
-<dt>Transport = module()</dt>
-<dd><p>Transport module.</p>
-</dd>
-<dt>TransOpts = any()</dt>
-<dd><p>Transport options.</p>
-</dd>
-<dt>Protocol = module()</dt>
-<dd><p>Protocol module.</p>
-</dd>
-<dt>ProtoOpts = any()</dt>
-<dd><p>Protocol options.</p>
-</dd>
-</dl>
-<p>Start listening for connections using the given transport and protocol. Returns the pid for this listener&apos;s supervisor.</p>
-<p>There are additional transport options that apply regardless of transport. They allow configuring how the connections are supervised, rate limited and more. Please consult the previous section for more details.</p>
-<h3 id="_stop_listener_ref_____ok____error__not_found">stop_listener(Ref) -&gt; ok | {error, not_found}</h3>
-<dl><dt>Ref = ref()</dt>
-<dd><p>Listener name.</p>
-</dd>
-</dl>
-<p>Stop the given listener.</p>
-<p>The listener is stopped gracefully, first by closing the listening port, then by stopping the connection processes. These processes are stopped according to the <code>shutdown</code> transport option, which may be set to brutally kill all connection processes or give them some time to stop properly.</p>
-<p>This function does not return until the listener is completely stopped.</p>
-
-
-
-
-
-
-</div>
-
-<div class="span3 sidecol">
-
-
-<h3>
- Ranch
- 1.5
- Function Reference
-
-</h3>
-
-<ul>
-
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
-
-
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
-
-
-</ul>
-
-<h4 id="docs-nav">Navigation</h4>
-
-<h4>Version select</h4>
-<ul>
-
-
-
- <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
-
- <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
-
- <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
-
- <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
-
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
-</ul>
-
-<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
-<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
-<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
-<input type="hidden" name="cmd" value="_donations">
-<input type="hidden" name="business" value="[email protected]">
-<input type="hidden" name="lc" value="FR">
-<input type="hidden" name="item_name" value="Loic Hoguin">
-<input type="hidden" name="item_number" value="99s">
-<input type="hidden" name="currency_code" value="EUR">
-<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
-<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
-<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
-</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
-
-
-
-</div>
-</div>
-</div>
-</div>
-
- <footer>
- <div class="container">
- <div class="row">
- <div class="span6">
- <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
- <nav>
- <ul>
- <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
- </ul>
- </nav>
- </div>
- <div class="span6 credits">
- <p><img src="/img/footer_logo.png"></p>
- <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
- </div>
- </div>
- </div>
- </footer>
-
-
- <script src="/js/custom.js"></script>
- </body>
-</html>
-
-
diff --git a/docs/en/ranch/1.5/manual/ranch_transport/index.html b/docs/en/ranch/1.5/manual/ranch_transport/index.html
deleted file mode 100644
index a5057cfa..00000000
--- a/docs/en/ranch/1.5/manual/ranch_transport/index.html
+++ /dev/null
@@ -1,381 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
-
- <title>Nine Nines: ranch_transport(3)</title>
-
- <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
- <link href="/css/99s.css?r=7" rel="stylesheet">
-
- <link rel="shortcut icon" href="/img/ico/favicon.ico">
- <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
- <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
- <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
-
-
-</head>
-
-
-<body class="">
- <header id="page-head">
- <div id="topbar" class="container">
- <div class="row">
- <div class="span2">
- <h1 id="logo"><a href="/" title="99s">99s</a></h1>
- </div>
- <div class="span10">
-
- <div id="side-header">
- <nav>
- <ul>
- <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
- <li><a title="Watch my talks" href="/talks">Talks</a></li>
- <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
- <li><a title="Request my services" href="/services">Consulting & Training</a></li>
- </ul>
- </nav>
- <ul id="social">
- <li>
- <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
- </li>
- <li>
- <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
- </li>
- </ul>
- </div>
- </div>
- </div>
- </div>
-
-
-</header>
-
-<div id="contents" class="two_col">
-<div class="container">
-<div class="row">
-<div id="docs" class="span9 maincol">
-
-<h1 class="lined-header"><span>ranch_transport(3)</span></h1>
-
-<h2 id="_name">Name</h2>
-<p>ranch_transport - behaviour for transport modules</p>
-<h2 id="_description">Description</h2>
-<p>The <code>ranch_transport</code> behaviour defines the interface used by Ranch transports.</p>
-<h2 id="_types">Types</h2>
-<h3 id="_sendfile_opts_______chunk_size__non_neg_integer">sendfile_opts() = [{chunk_size, non_neg_integer()}]</h3>
-<p>Options used by the sendfile function and callbacks.</p>
-<p>Allows configuring the chunk size, in bytes. Defaults to 8191 bytes.</p>
-<h2 id="_callbacks">Callbacks</h2>
-<h3 id="_accept_lsocket__timeout______ok__csocket_____error__closed___timeout___atom">accept(LSocket, Timeout) -&gt; {ok, CSocket} | {error, closed | timeout | atom()}</h3>
-<dl><dt>LSocket = CSocket = any()</dt>
-<dd><p>Listening socket.</p>
-</dd>
-<dt>Timeout = timeout()</dt>
-<dd><p>Accept timeout.</p>
-</dd>
-</dl>
-<p>Accept a connection on the given listening socket.</p>
-<p>The <code>accept_ack</code> callback will be used to initialize the socket after accepting the connection. This is most useful when the transport is not raw TCP, like with SSL for example.</p>
-<h3 id="_accept_ack_csocket__timeout_____ok">accept_ack(CSocket, Timeout) -&gt; ok</h3>
-<dl><dt>CSocket = any()</dt>
-<dd><p>Socket for this connection.</p>
-</dd>
-<dt>Timeout = timeout()</dt>
-<dd><p>Ack timeout.</p>
-</dd>
-</dl>
-<p>Perform post-accept initialization of the connection.</p>
-<p>This function will be called by connection processes before performing any socket operation. It allows transports that require extra initialization to perform their task and make the socket ready to use.</p>
-<h3 id="_close_socket_____ok">close(Socket) -&gt; ok</h3>
-<dl><dt>Socket = any()</dt>
-<dd><p>Socket opened with listen/1 or accept/2.</p>
-</dd>
-</dl>
-<p>Close the given socket.</p>
-<h3 id="_controlling_process_socket__pid_____ok____error__closed___not_owner___atom">controlling_process(Socket, Pid) -&gt; ok | {error, closed | not_owner | atom()}</h3>
-<dl><dt>Socket = any()</dt>
-<dd><p>Socket opened with listen/1 or accept/2.</p>
-</dd>
-<dt>Pid = pid()</dt>
-<dd><p>Pid of the new owner of the socket.</p>
-</dd>
-</dl>
-<p>Change the controlling process for the given socket.</p>
-<p>The controlling process is the process that is allowed to perform operations on the socket, and that will receive messages from the socket when active mode is used. When the controlling process dies, the socket is closed.</p>
-<h3 id="_listen_transopts______ok__lsocket_____error__atom">listen(TransOpts) -&gt; {ok, LSocket} | {error, atom()}</h3>
-<dl><dt>TransOpts = any()</dt>
-<dd><p>Transport options.</p>
-</dd>
-<dt>LSocket = any()</dt>
-<dd><p>Listening socket.</p>
-</dd>
-</dl>
-<p>Listen for connections on the given port.</p>
-<p>The port is given as part of the transport options under the key <code>port</code>. Any other option is transport dependent.</p>
-<p>The socket returned by this call can then be used to accept connections. It is not possible to send or receive data from the listening socket.</p>
-<h3 id="_messages_______ok__closed__error">messages() -&gt; {OK, Closed, Error}</h3>
-<dl><dt>OK = Closed = Error = atom()</dt>
-<dd><p>Tuple names.</p>
-</dd>
-</dl>
-<p>Return the atoms used to identify messages sent in active mode.</p>
-<h3 id="_name______name">name() -&gt; Name</h3>
-<dl><dt>Name = atom()</dt>
-<dd><p>Transport module name.</p>
-</dd>
-</dl>
-<p>Return the name of the transport.</p>
-<h3 id="_peername_csocket______ok___ip__port______error__atom">peername(CSocket) -&gt; {ok, {IP, Port}} | {error, atom()}</h3>
-<dl><dt>CSocket = any()</dt>
-<dd><p>Socket for this connection.</p>
-</dd>
-<dt>IP = inet:ip_address()</dt>
-<dd><p>IP of the remote endpoint.</p>
-</dd>
-<dt>Port = inet:port_number()</dt>
-<dd><p>Port of the remote endpoint.</p>
-</dd>
-</dl>
-<p>Return the IP and port of the remote endpoint.</p>
-<h3 id="_recv_csocket__length__timeout______ok__packet_____error__closed___timeout___atom">recv(CSocket, Length, Timeout) -&gt; {ok, Packet} | {error, closed | timeout | atom()}</h3>
-<dl><dt>CSocket = any()</dt>
-<dd><p>Socket for this connection.</p>
-</dd>
-<dt>Length = non_neg_integer()</dt>
-<dd><p>Requested length.</p>
-</dd>
-<dt>Timeout = timeout()</dt>
-<dd><p>Receive timeout.</p>
-</dd>
-<dt>Packet = iodata() | any()</dt>
-<dd><p>Data received.</p>
-</dd>
-</dl>
-<p>Receive data from the given socket when in passive mode.</p>
-<p>Trying to receive data from a socket that is in active mode will return an error.</p>
-<p>A length of 0 will return any data available on the socket.</p>
-<p>While it is possible to use the timeout value <code>infinity</code>, this is highly discouraged as this could cause your process to get stuck waiting for data that will never come. This may happen when a socket becomes half-open due to a crash of the remote endpoint. Wi-Fi going down is another common culprit of this issue.</p>
-<h3 id="_send_csocket__packet_____ok____error__atom">send(CSocket, Packet) -&gt; ok | {error, atom()}</h3>
-<dl><dt>CSocket = any()</dt>
-<dd><p>Socket for this connection.</p>
-</dd>
-<dt>Packet = iodata()</dt>
-<dd><p>Data to be sent.</p>
-</dd>
-</dl>
-<p>Send data to the given socket.</p>
-<h3 id="_sendfile_csocket__file_____sendfile_csocket__file__0__0">sendfile(CSocket, File) -&gt; sendfile(CSocket, File, 0, 0, [])</h3>
-<p>Alias of <code>ranch_transport:sendfile/5</code>.</p>
-<h3 id="_sendfile_csocket__file__offset__bytes_____sendfile_csocket__file__offset__bytes">sendfile(CSocket, File, Offset, Bytes) -&gt; sendfile(CSocket, File, Offset, Bytes, [])</h3>
-<p>Alias of <code>ranch_transport:sendfile/5</code>.</p>
-<h3 id="_sendfile_csocket__file__offset__bytes__sfopts______ok__sentbytes_____error__atom">sendfile(CSocket, File, Offset, Bytes, SfOpts) -&gt; {ok, SentBytes} | {error, atom()}</h3>
-<dl><dt>CSocket = any()</dt>
-<dd><p>Socket for this connection.</p>
-</dd>
-<dt>File = file:filename_all() | file:fd()</dt>
-<dd><p>Filename or file descriptor for the file to be sent.</p>
-</dd>
-<dt>Offset = non_neg_integer()</dt>
-<dd><p>Begin sending at this position in the file.</p>
-</dd>
-<dt>Bytes = non_neg_integer()</dt>
-<dd><p>Send this many bytes.</p>
-</dd>
-<dt>SentBytes = non_neg_integer()</dt>
-<dd><p>This many bytes were sent.</p>
-</dd>
-<dt>SfOpts = sendfile_opts()</dt>
-<dd><p>Sendfile options.</p>
-</dd>
-</dl>
-<p>Send data from a file to the given socket.</p>
-<p>The file may be sent full or in parts, and may be specified by its filename or by an already open file descriptor.</p>
-<p>Transports that manipulate TCP directly may use the <code>file:sendfile/{2,4,5}</code> function, which calls the sendfile syscall where applicable (on Linux, for example). Other transports can use the <code>sendfile/6</code> function exported from this module.</p>
-<h3 id="_setopts_csocket__sockopts_____ok____error__atom">setopts(CSocket, SockOpts) -&gt; ok | {error, atom()}</h3>
-<dl><dt>CSocket = any()</dt>
-<dd><p>Socket for this connection.</p>
-</dd>
-<dt>SockOpts = any()</dt>
-<dd><p>Socket options.</p>
-</dd>
-</dl>
-<p>Change options for the given socket.</p>
-<p>This is mainly useful for switching to active or passive mode or to set protocol-specific options.</p>
-<h3 id="_getopts_csocket__sockopts______ok__sockoptvalues_____error__atom">getopts(CSocket, SockOpts) -&gt; {ok, SockOptValues} | {error, atom()}</h3>
-<dl><dt>CSocket = any()</dt>
-<dd><p>Socket for this connection.</p>
-</dd>
-<dt>SockOpts = [atom]</dt>
-<dd><p>Socket option names.</p>
-</dd>
-<dt>SockOptValues = list()</dt>
-<dd><p>Socket options.</p>
-</dd>
-</dl>
-<p>Get options for the given socket.</p>
-<h3 id="_getstat_csocket______ok__sockstatvalues_____error__atom">getstat(CSocket) -&gt; {ok, SockStatValues} | {error, atom()}</h3>
-<dl><dt>CSocket = any()</dt>
-<dd><p>Socket for this connection.</p>
-</dd>
-<dt>SockStatValues = list()</dt>
-<dd><p>Socket statistics.</p>
-</dd>
-</dl>
-<p>Get statistics for the given socket.</p>
-<h3 id="_getstat_csocket__sockstats______ok__sockstatvalues_____error__atom">getstat(CSocket, SockStats) -&gt; {ok, SockStatValues} | {error, atom()}</h3>
-<dl><dt>CSocket = any()</dt>
-<dd><p>Socket for this connection.</p>
-</dd>
-<dt>SockStats = [atom()]</dt>
-<dd><p>Socket statistic names.</p>
-</dd>
-<dt>SockStatValues = list()</dt>
-<dd><p>Socket statistics.</p>
-</dd>
-</dl>
-<p>Get statistics for the given socket.</p>
-<h3 id="_shutdown_csocket__how_____ok____error__atom">shutdown(CSocket, How) -&gt; ok | {error, atom()}</h3>
-<dl><dt>CSocket = any()</dt>
-<dd><p>Socket for this connection.</p>
-</dd>
-<dt>How = read | write | read_write</dt>
-<dd><p>Which side(s) of the socket to close.</p>
-</dd>
-</dl>
-<p>Immediately close the socket in one or two directions.</p>
-<h3 id="_sockname_socket______ok___ip__port______error__atom">sockname(Socket) -&gt; {ok, {IP, Port}} | {error, atom()}</h3>
-<dl><dt>Socket = any()</dt>
-<dd><p>Socket opened with listen/1 or accept/2.</p>
-</dd>
-<dt>IP = inet:ip_address()</dt>
-<dd><p>IP of the local endpoint.</p>
-</dd>
-<dt>Port = inet:port_number()</dt>
-<dd><p>Port of the local endpoint.</p>
-</dd>
-</dl>
-<p>Return the IP and port of the local endpoint.</p>
-<h2 id="_exports">Exports</h2>
-<h3 id="_sendfile_transport__csocket__file__offset__bytes__sfopts______ok__sentbytes_____error__atom">sendfile(Transport, CSocket, File, Offset, Bytes, SfOpts) -&gt; {ok, SentBytes} | {error, atom()}</h3>
-<dl><dt>Transport = module()</dt>
-<dd><p>Transport module for this socket.</p>
-</dd>
-<dt>CSocket = any()</dt>
-<dd><p>Socket for this connection.</p>
-</dd>
-<dt>File = file:filename_all() | file:fd()</dt>
-<dd><p>Filename or file descriptor for the file to be sent.</p>
-</dd>
-<dt>Offset = non_neg_integer()</dt>
-<dd><p>Begin sending at this position in the file.</p>
-</dd>
-<dt>Bytes = non_neg_integer()</dt>
-<dd><p>Send this many bytes.</p>
-</dd>
-<dt>SentBytes = non_neg_integer()</dt>
-<dd><p>This many bytes were sent.</p>
-</dd>
-<dt>SfOpts = sendfile_opts()</dt>
-<dd><p>Sendfile options.</p>
-</dd>
-</dl>
-<p>Send data from a file to the given socket.</p>
-<p>This function emulates the function <code>file:sendfile/{2,4,5}</code> and may be used when transports are not manipulating TCP directly.</p>
-
-
-
-
-
-
-</div>
-
-<div class="span3 sidecol">
-
-
-<h3>
- Ranch
- 1.5
- Function Reference
-
-</h3>
-
-<ul>
-
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
-
-
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
-
-
-</ul>
-
-<h4 id="docs-nav">Navigation</h4>
-
-<h4>Version select</h4>
-<ul>
-
-
-
- <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
-
- <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
-
- <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
-
- <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
-
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
-</ul>
-
-<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
-<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
-<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
-<input type="hidden" name="cmd" value="_donations">
-<input type="hidden" name="business" value="[email protected]">
-<input type="hidden" name="lc" value="FR">
-<input type="hidden" name="item_name" value="Loic Hoguin">
-<input type="hidden" name="item_number" value="99s">
-<input type="hidden" name="currency_code" value="EUR">
-<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
-<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
-<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
-</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
-
-
-
-</div>
-</div>
-</div>
-</div>
-
- <footer>
- <div class="container">
- <div class="row">
- <div class="span6">
- <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
- <nav>
- <ul>
- <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
- </ul>
- </nav>
- </div>
- <div class="span6 credits">
- <p><img src="/img/footer_logo.png"></p>
- <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
- </div>
- </div>
- </div>
- </footer>
-
-
- <script src="/js/custom.js"></script>
- </body>
-</html>
-
-
diff --git a/docs/en/ranch/1.6/guide/embedded/index.html b/docs/en/ranch/1.6/guide/embedded/index.html
index c4c06ce5..d8a8477e 100644
--- a/docs/en/ranch/1.6/guide/embedded/index.html
+++ b/docs/en/ranch/1.6/guide/embedded/index.html
@@ -142,6 +142,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -150,8 +152,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/guide/index.html b/docs/en/ranch/1.6/guide/index.html
index 0709c58a..cf8045ce 100644
--- a/docs/en/ranch/1.6/guide/index.html
+++ b/docs/en/ranch/1.6/guide/index.html
@@ -129,6 +129,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -137,8 +139,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/guide/internals/index.html b/docs/en/ranch/1.6/guide/internals/index.html
index 6f81096b..23d817eb 100644
--- a/docs/en/ranch/1.6/guide/internals/index.html
+++ b/docs/en/ranch/1.6/guide/internals/index.html
@@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -154,8 +156,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/guide/introduction/index.html b/docs/en/ranch/1.6/guide/introduction/index.html
index 09bf2d5b..0a7def62 100644
--- a/docs/en/ranch/1.6/guide/introduction/index.html
+++ b/docs/en/ranch/1.6/guide/introduction/index.html
@@ -126,6 +126,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -134,8 +136,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/guide/listeners/index.html b/docs/en/ranch/1.6/guide/listeners/index.html
index 68bcbe3e..0cd4fd9e 100644
--- a/docs/en/ranch/1.6/guide/listeners/index.html
+++ b/docs/en/ranch/1.6/guide/listeners/index.html
@@ -361,6 +361,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -369,8 +371,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/guide/migrating_from_1.5/index.html b/docs/en/ranch/1.6/guide/migrating_from_1.5/index.html
index 4f3d4f52..0157963a 100644
--- a/docs/en/ranch/1.6/guide/migrating_from_1.5/index.html
+++ b/docs/en/ranch/1.6/guide/migrating_from_1.5/index.html
@@ -161,6 +161,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -169,8 +171,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/guide/migrating_from_1.6/index.html b/docs/en/ranch/1.6/guide/migrating_from_1.6/index.html
index 749ac6eb..0f2acbf7 100644
--- a/docs/en/ranch/1.6/guide/migrating_from_1.6/index.html
+++ b/docs/en/ranch/1.6/guide/migrating_from_1.6/index.html
@@ -124,6 +124,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -132,8 +134,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/guide/migrating_from_1.x/index.html b/docs/en/ranch/1.6/guide/migrating_from_1.x/index.html
index 8364a90f..96416f93 100644
--- a/docs/en/ranch/1.6/guide/migrating_from_1.x/index.html
+++ b/docs/en/ranch/1.6/guide/migrating_from_1.x/index.html
@@ -214,6 +214,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -222,8 +224,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/guide/parsers/index.html b/docs/en/ranch/1.6/guide/parsers/index.html
index 627d524b..399b0607 100644
--- a/docs/en/ranch/1.6/guide/parsers/index.html
+++ b/docs/en/ranch/1.6/guide/parsers/index.html
@@ -181,6 +181,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -189,8 +191,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/guide/protocols/index.html b/docs/en/ranch/1.6/guide/protocols/index.html
index 4939bfdf..4510e620 100644
--- a/docs/en/ranch/1.6/guide/protocols/index.html
+++ b/docs/en/ranch/1.6/guide/protocols/index.html
@@ -188,6 +188,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -196,8 +198,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/guide/ssl_auth/index.html b/docs/en/ranch/1.6/guide/ssl_auth/index.html
index 058a22b3..50e46572 100644
--- a/docs/en/ranch/1.6/guide/ssl_auth/index.html
+++ b/docs/en/ranch/1.6/guide/ssl_auth/index.html
@@ -194,6 +194,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -202,8 +204,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/guide/transports/index.html b/docs/en/ranch/1.6/guide/transports/index.html
index ab24caec..fbb14f9e 100644
--- a/docs/en/ranch/1.6/guide/transports/index.html
+++ b/docs/en/ranch/1.6/guide/transports/index.html
@@ -228,6 +228,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -236,8 +238,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/guide/upcoming_2.0_changes/index.html b/docs/en/ranch/1.6/guide/upcoming_2.0_changes/index.html
index 007b4b6f..3b0a6958 100644
--- a/docs/en/ranch/1.6/guide/upcoming_2.0_changes/index.html
+++ b/docs/en/ranch/1.6/guide/upcoming_2.0_changes/index.html
@@ -135,6 +135,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -143,8 +145,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/index.html b/docs/en/ranch/1.6/manual/index.html
index d9b2ad1d..4eae9350 100644
--- a/docs/en/ranch/1.6/manual/index.html
+++ b/docs/en/ranch/1.6/manual/index.html
@@ -139,6 +139,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -147,8 +149,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.child_spec/index.html b/docs/en/ranch/1.6/manual/ranch.child_spec/index.html
index 686de6a3..d0f631f8 100644
--- a/docs/en/ranch/1.6/manual/ranch.child_spec/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.child_spec/index.html
@@ -159,6 +159,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -167,8 +169,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.get_addr/index.html b/docs/en/ranch/1.6/manual/ranch.get_addr/index.html
index ed9ef2fb..2455e766 100644
--- a/docs/en/ranch/1.6/manual/ranch.get_addr/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.get_addr/index.html
@@ -127,6 +127,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -135,8 +137,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.get_max_connections/index.html b/docs/en/ranch/1.6/manual/ranch.get_max_connections/index.html
index 340305de..48be0cb5 100644
--- a/docs/en/ranch/1.6/manual/ranch.get_max_connections/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.get_max_connections/index.html
@@ -125,6 +125,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -133,8 +135,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.get_port/index.html b/docs/en/ranch/1.6/manual/ranch.get_port/index.html
index aead1e9c..cee3b87d 100644
--- a/docs/en/ranch/1.6/manual/ranch.get_port/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.get_port/index.html
@@ -126,6 +126,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -134,8 +136,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.get_protocol_options/index.html b/docs/en/ranch/1.6/manual/ranch.get_protocol_options/index.html
index efd2a073..c724256a 100644
--- a/docs/en/ranch/1.6/manual/ranch.get_protocol_options/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.get_protocol_options/index.html
@@ -125,6 +125,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -133,8 +135,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.get_status/index.html b/docs/en/ranch/1.6/manual/ranch.get_status/index.html
index bff164d4..4cee6a3f 100644
--- a/docs/en/ranch/1.6/manual/ranch.get_status/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.get_status/index.html
@@ -128,6 +128,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -136,8 +138,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.get_transport_options/index.html b/docs/en/ranch/1.6/manual/ranch.get_transport_options/index.html
index 0b8bc9a8..29435094 100644
--- a/docs/en/ranch/1.6/manual/ranch.get_transport_options/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.get_transport_options/index.html
@@ -125,6 +125,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -133,8 +135,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.handshake/index.html b/docs/en/ranch/1.6/manual/ranch.handshake/index.html
index cb0631b5..fd4da6d9 100644
--- a/docs/en/ranch/1.6/manual/ranch.handshake/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.handshake/index.html
@@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -156,8 +158,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.info/index.html b/docs/en/ranch/1.6/manual/ranch.info/index.html
index 9363446d..0ea48a08 100644
--- a/docs/en/ranch/1.6/manual/ranch.info/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.info/index.html
@@ -173,6 +173,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -181,8 +183,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.procs/index.html b/docs/en/ranch/1.6/manual/ranch.procs/index.html
index 41cade9b..58088a61 100644
--- a/docs/en/ranch/1.6/manual/ranch.procs/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.procs/index.html
@@ -136,6 +136,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -144,8 +146,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.remove_connection/index.html b/docs/en/ranch/1.6/manual/ranch.remove_connection/index.html
index 9ce3b568..668aef67 100644
--- a/docs/en/ranch/1.6/manual/ranch.remove_connection/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.remove_connection/index.html
@@ -126,6 +126,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -134,8 +136,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.resume_listener/index.html b/docs/en/ranch/1.6/manual/ranch.resume_listener/index.html
index bab4fc9f..f522a68f 100644
--- a/docs/en/ranch/1.6/manual/ranch.resume_listener/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.resume_listener/index.html
@@ -132,6 +132,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -140,8 +142,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.set_max_connections/index.html b/docs/en/ranch/1.6/manual/ranch.set_max_connections/index.html
index 866e7010..dcff4933 100644
--- a/docs/en/ranch/1.6/manual/ranch.set_max_connections/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.set_max_connections/index.html
@@ -130,6 +130,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -138,8 +140,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.set_protocol_options/index.html b/docs/en/ranch/1.6/manual/ranch.set_protocol_options/index.html
index 1dc723e1..749e8396 100644
--- a/docs/en/ranch/1.6/manual/ranch.set_protocol_options/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.set_protocol_options/index.html
@@ -130,6 +130,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -138,8 +140,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.set_transport_options/index.html b/docs/en/ranch/1.6/manual/ranch.set_transport_options/index.html
index 41ec2431..4403a015 100644
--- a/docs/en/ranch/1.6/manual/ranch.set_transport_options/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.set_transport_options/index.html
@@ -135,6 +135,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -143,8 +145,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.start_listener/index.html b/docs/en/ranch/1.6/manual/ranch.start_listener/index.html
index 1024db56..8ba4b206 100644
--- a/docs/en/ranch/1.6/manual/ranch.start_listener/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.start_listener/index.html
@@ -184,6 +184,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -192,8 +194,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.stop_listener/index.html b/docs/en/ranch/1.6/manual/ranch.stop_listener/index.html
index 17dc1ba5..b7b2a58e 100644
--- a/docs/en/ranch/1.6/manual/ranch.stop_listener/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.stop_listener/index.html
@@ -129,6 +129,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -137,8 +139,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.suspend_listener/index.html b/docs/en/ranch/1.6/manual/ranch.suspend_listener/index.html
index 147a6ba3..0495dead 100644
--- a/docs/en/ranch/1.6/manual/ranch.suspend_listener/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.suspend_listener/index.html
@@ -133,6 +133,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -141,8 +143,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch.wait_for_connections/index.html b/docs/en/ranch/1.6/manual/ranch.wait_for_connections/index.html
index f38e6c82..3b8224a8 100644
--- a/docs/en/ranch/1.6/manual/ranch.wait_for_connections/index.html
+++ b/docs/en/ranch/1.6/manual/ranch.wait_for_connections/index.html
@@ -153,6 +153,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -161,8 +163,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch/index.html b/docs/en/ranch/1.6/manual/ranch/index.html
index 1ffd585f..b887ff53 100644
--- a/docs/en/ranch/1.6/manual/ranch/index.html
+++ b/docs/en/ranch/1.6/manual/ranch/index.html
@@ -236,6 +236,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -244,8 +246,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch_app/index.html b/docs/en/ranch/1.6/manual/ranch_app/index.html
index c8acc2e0..ef944841 100644
--- a/docs/en/ranch/1.6/manual/ranch_app/index.html
+++ b/docs/en/ranch/1.6/manual/ranch_app/index.html
@@ -139,6 +139,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -147,8 +149,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch_protocol/index.html b/docs/en/ranch/1.6/manual/ranch_protocol/index.html
index e97c765e..1c038948 100644
--- a/docs/en/ranch/1.6/manual/ranch_protocol/index.html
+++ b/docs/en/ranch/1.6/manual/ranch_protocol/index.html
@@ -125,6 +125,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -133,8 +135,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch_ssl/index.html b/docs/en/ranch/1.6/manual/ranch_ssl/index.html
index c9ddbcdd..aaee0ef6 100644
--- a/docs/en/ranch/1.6/manual/ranch_ssl/index.html
+++ b/docs/en/ranch/1.6/manual/ranch_ssl/index.html
@@ -277,6 +277,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -285,8 +287,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch_tcp/index.html b/docs/en/ranch/1.6/manual/ranch_tcp/index.html
index eb34b470..743f61f9 100644
--- a/docs/en/ranch/1.6/manual/ranch_tcp/index.html
+++ b/docs/en/ranch/1.6/manual/ranch_tcp/index.html
@@ -224,6 +224,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -232,8 +234,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch_transport.sendfile/index.html b/docs/en/ranch/1.6/manual/ranch_transport.sendfile/index.html
index 870c5616..1ef6bbfa 100644
--- a/docs/en/ranch/1.6/manual/ranch_transport.sendfile/index.html
+++ b/docs/en/ranch/1.6/manual/ranch_transport.sendfile/index.html
@@ -160,6 +160,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -168,8 +170,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.6/manual/ranch_transport/index.html b/docs/en/ranch/1.6/manual/ranch_transport/index.html
index b5995224..f99ac9e9 100644
--- a/docs/en/ranch/1.6/manual/ranch_transport/index.html
+++ b/docs/en/ranch/1.6/manual/ranch_transport/index.html
@@ -325,6 +325,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -333,8 +335,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/guide/embedded/index.html b/docs/en/ranch/1.7/guide/embedded/index.html
index 2b7e5a77..2aee8a4c 100644
--- a/docs/en/ranch/1.7/guide/embedded/index.html
+++ b/docs/en/ranch/1.7/guide/embedded/index.html
@@ -142,6 +142,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -150,8 +152,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/guide/index.html b/docs/en/ranch/1.7/guide/index.html
index 747923c4..cb3a7468 100644
--- a/docs/en/ranch/1.7/guide/index.html
+++ b/docs/en/ranch/1.7/guide/index.html
@@ -131,6 +131,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -139,8 +141,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/guide/internals/index.html b/docs/en/ranch/1.7/guide/internals/index.html
index 7584b9c1..801992ae 100644
--- a/docs/en/ranch/1.7/guide/internals/index.html
+++ b/docs/en/ranch/1.7/guide/internals/index.html
@@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -154,8 +156,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/guide/introduction/index.html b/docs/en/ranch/1.7/guide/introduction/index.html
index f5f99166..2dbd25e3 100644
--- a/docs/en/ranch/1.7/guide/introduction/index.html
+++ b/docs/en/ranch/1.7/guide/introduction/index.html
@@ -125,6 +125,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -133,8 +135,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/guide/listeners/index.html b/docs/en/ranch/1.7/guide/listeners/index.html
index 15f0979d..3313160a 100644
--- a/docs/en/ranch/1.7/guide/listeners/index.html
+++ b/docs/en/ranch/1.7/guide/listeners/index.html
@@ -361,6 +361,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -369,8 +371,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/guide/migrating_from_1.5/index.html b/docs/en/ranch/1.7/guide/migrating_from_1.5/index.html
index 2b9cb65c..a753fb00 100644
--- a/docs/en/ranch/1.7/guide/migrating_from_1.5/index.html
+++ b/docs/en/ranch/1.7/guide/migrating_from_1.5/index.html
@@ -161,6 +161,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -169,8 +171,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/guide/migrating_from_1.6/index.html b/docs/en/ranch/1.7/guide/migrating_from_1.6/index.html
index 94d71407..1a774165 100644
--- a/docs/en/ranch/1.7/guide/migrating_from_1.6/index.html
+++ b/docs/en/ranch/1.7/guide/migrating_from_1.6/index.html
@@ -141,6 +141,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -149,8 +151,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/guide/migrating_from_1.7/index.html b/docs/en/ranch/1.7/guide/migrating_from_1.7/index.html
index b88e54d4..ec18978b 100644
--- a/docs/en/ranch/1.7/guide/migrating_from_1.7/index.html
+++ b/docs/en/ranch/1.7/guide/migrating_from_1.7/index.html
@@ -123,6 +123,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -131,8 +133,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/guide/migrating_from_1.x/index.html b/docs/en/ranch/1.7/guide/migrating_from_1.x/index.html
index 17bb5aac..a52d1a37 100644
--- a/docs/en/ranch/1.7/guide/migrating_from_1.x/index.html
+++ b/docs/en/ranch/1.7/guide/migrating_from_1.x/index.html
@@ -214,6 +214,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -222,8 +224,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/guide/parsers/index.html b/docs/en/ranch/1.7/guide/parsers/index.html
index 78a49adc..41cb4646 100644
--- a/docs/en/ranch/1.7/guide/parsers/index.html
+++ b/docs/en/ranch/1.7/guide/parsers/index.html
@@ -181,6 +181,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -189,8 +191,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/guide/protocols/index.html b/docs/en/ranch/1.7/guide/protocols/index.html
index 93e8e08a..e33735a7 100644
--- a/docs/en/ranch/1.7/guide/protocols/index.html
+++ b/docs/en/ranch/1.7/guide/protocols/index.html
@@ -188,6 +188,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -196,8 +198,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/guide/ssl_auth/index.html b/docs/en/ranch/1.7/guide/ssl_auth/index.html
index 6b5601b2..a8ca8ba4 100644
--- a/docs/en/ranch/1.7/guide/ssl_auth/index.html
+++ b/docs/en/ranch/1.7/guide/ssl_auth/index.html
@@ -194,6 +194,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -202,8 +204,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/guide/transports/index.html b/docs/en/ranch/1.7/guide/transports/index.html
index 110de678..5d5dca76 100644
--- a/docs/en/ranch/1.7/guide/transports/index.html
+++ b/docs/en/ranch/1.7/guide/transports/index.html
@@ -228,6 +228,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -236,8 +238,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/guide/upcoming_2.0_changes/index.html b/docs/en/ranch/1.7/guide/upcoming_2.0_changes/index.html
index d6378b69..07de8d28 100644
--- a/docs/en/ranch/1.7/guide/upcoming_2.0_changes/index.html
+++ b/docs/en/ranch/1.7/guide/upcoming_2.0_changes/index.html
@@ -135,6 +135,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -143,8 +145,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/index.html b/docs/en/ranch/1.7/manual/index.html
index ef95ccba..52a5c153 100644
--- a/docs/en/ranch/1.7/manual/index.html
+++ b/docs/en/ranch/1.7/manual/index.html
@@ -141,6 +141,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -149,8 +151,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.child_spec/index.html b/docs/en/ranch/1.7/manual/ranch.child_spec/index.html
index adb5f09d..24f20684 100644
--- a/docs/en/ranch/1.7/manual/ranch.child_spec/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.child_spec/index.html
@@ -159,6 +159,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -167,8 +169,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.get_addr/index.html b/docs/en/ranch/1.7/manual/ranch.get_addr/index.html
index 76bce6c0..9dec1419 100644
--- a/docs/en/ranch/1.7/manual/ranch.get_addr/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.get_addr/index.html
@@ -127,6 +127,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -135,8 +137,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.get_max_connections/index.html b/docs/en/ranch/1.7/manual/ranch.get_max_connections/index.html
index 3d224ad6..91c4ff69 100644
--- a/docs/en/ranch/1.7/manual/ranch.get_max_connections/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.get_max_connections/index.html
@@ -125,6 +125,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -133,8 +135,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.get_port/index.html b/docs/en/ranch/1.7/manual/ranch.get_port/index.html
index fdd4ccc1..3f3cd8fd 100644
--- a/docs/en/ranch/1.7/manual/ranch.get_port/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.get_port/index.html
@@ -126,6 +126,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -134,8 +136,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.get_protocol_options/index.html b/docs/en/ranch/1.7/manual/ranch.get_protocol_options/index.html
index 56aa1927..0a8e6c1d 100644
--- a/docs/en/ranch/1.7/manual/ranch.get_protocol_options/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.get_protocol_options/index.html
@@ -125,6 +125,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -133,8 +135,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.get_status/index.html b/docs/en/ranch/1.7/manual/ranch.get_status/index.html
index bd793db6..8b7ba404 100644
--- a/docs/en/ranch/1.7/manual/ranch.get_status/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.get_status/index.html
@@ -128,6 +128,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -136,8 +138,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.get_transport_options/index.html b/docs/en/ranch/1.7/manual/ranch.get_transport_options/index.html
index 4d3c3549..57998529 100644
--- a/docs/en/ranch/1.7/manual/ranch.get_transport_options/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.get_transport_options/index.html
@@ -125,6 +125,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -133,8 +135,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.handshake/index.html b/docs/en/ranch/1.7/manual/ranch.handshake/index.html
index 1fae618b..3c6a12bc 100644
--- a/docs/en/ranch/1.7/manual/ranch.handshake/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.handshake/index.html
@@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -156,8 +158,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.info/index.html b/docs/en/ranch/1.7/manual/ranch.info/index.html
index 2d4823fc..fe4dd77a 100644
--- a/docs/en/ranch/1.7/manual/ranch.info/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.info/index.html
@@ -173,6 +173,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -181,8 +183,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.procs/index.html b/docs/en/ranch/1.7/manual/ranch.procs/index.html
index 6c8e9034..4d0e7130 100644
--- a/docs/en/ranch/1.7/manual/ranch.procs/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.procs/index.html
@@ -136,6 +136,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -144,8 +146,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.recv_proxy_header/index.html b/docs/en/ranch/1.7/manual/ranch.recv_proxy_header/index.html
index 96c75337..41d19cd8 100644
--- a/docs/en/ranch/1.7/manual/ranch.recv_proxy_header/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.recv_proxy_header/index.html
@@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -154,8 +156,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.remove_connection/index.html b/docs/en/ranch/1.7/manual/ranch.remove_connection/index.html
index 9652c8f9..7afb4065 100644
--- a/docs/en/ranch/1.7/manual/ranch.remove_connection/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.remove_connection/index.html
@@ -126,6 +126,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -134,8 +136,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.resume_listener/index.html b/docs/en/ranch/1.7/manual/ranch.resume_listener/index.html
index bdf1da3a..da075483 100644
--- a/docs/en/ranch/1.7/manual/ranch.resume_listener/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.resume_listener/index.html
@@ -132,6 +132,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -140,8 +142,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.set_max_connections/index.html b/docs/en/ranch/1.7/manual/ranch.set_max_connections/index.html
index 479ea53d..456ce625 100644
--- a/docs/en/ranch/1.7/manual/ranch.set_max_connections/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.set_max_connections/index.html
@@ -130,6 +130,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -138,8 +140,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.set_protocol_options/index.html b/docs/en/ranch/1.7/manual/ranch.set_protocol_options/index.html
index 59c46623..d5386bb5 100644
--- a/docs/en/ranch/1.7/manual/ranch.set_protocol_options/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.set_protocol_options/index.html
@@ -130,6 +130,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -138,8 +140,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.set_transport_options/index.html b/docs/en/ranch/1.7/manual/ranch.set_transport_options/index.html
index ca1d12f0..e8d4323d 100644
--- a/docs/en/ranch/1.7/manual/ranch.set_transport_options/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.set_transport_options/index.html
@@ -135,6 +135,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -143,8 +145,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.start_listener/index.html b/docs/en/ranch/1.7/manual/ranch.start_listener/index.html
index c9dd2bff..6a92205f 100644
--- a/docs/en/ranch/1.7/manual/ranch.start_listener/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.start_listener/index.html
@@ -184,6 +184,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -192,8 +194,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.stop_listener/index.html b/docs/en/ranch/1.7/manual/ranch.stop_listener/index.html
index 3ff73f48..fdc123da 100644
--- a/docs/en/ranch/1.7/manual/ranch.stop_listener/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.stop_listener/index.html
@@ -129,6 +129,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -137,8 +139,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.suspend_listener/index.html b/docs/en/ranch/1.7/manual/ranch.suspend_listener/index.html
index cc9262ce..aaa5e741 100644
--- a/docs/en/ranch/1.7/manual/ranch.suspend_listener/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.suspend_listener/index.html
@@ -133,6 +133,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -141,8 +143,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch.wait_for_connections/index.html b/docs/en/ranch/1.7/manual/ranch.wait_for_connections/index.html
index 919c1c35..eaccbe5e 100644
--- a/docs/en/ranch/1.7/manual/ranch.wait_for_connections/index.html
+++ b/docs/en/ranch/1.7/manual/ranch.wait_for_connections/index.html
@@ -153,6 +153,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -161,8 +163,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch/index.html b/docs/en/ranch/1.7/manual/ranch/index.html
index cbdf432c..98cdd679 100644
--- a/docs/en/ranch/1.7/manual/ranch/index.html
+++ b/docs/en/ranch/1.7/manual/ranch/index.html
@@ -238,6 +238,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -246,8 +248,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch_app/index.html b/docs/en/ranch/1.7/manual/ranch_app/index.html
index f58475f7..0fca4b09 100644
--- a/docs/en/ranch/1.7/manual/ranch_app/index.html
+++ b/docs/en/ranch/1.7/manual/ranch_app/index.html
@@ -141,6 +141,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -149,8 +151,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch_protocol/index.html b/docs/en/ranch/1.7/manual/ranch_protocol/index.html
index a52f14bb..a7971ae3 100644
--- a/docs/en/ranch/1.7/manual/ranch_protocol/index.html
+++ b/docs/en/ranch/1.7/manual/ranch_protocol/index.html
@@ -125,6 +125,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -133,8 +135,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch_proxy_header.header/index.html b/docs/en/ranch/1.7/manual/ranch_proxy_header.header/index.html
index 60ef4508..e4778a53 100644
--- a/docs/en/ranch/1.7/manual/ranch_proxy_header.header/index.html
+++ b/docs/en/ranch/1.7/manual/ranch_proxy_header.header/index.html
@@ -160,6 +160,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -168,8 +170,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch_proxy_header.parse/index.html b/docs/en/ranch/1.7/manual/ranch_proxy_header.parse/index.html
index 52c8f30b..8b0aff92 100644
--- a/docs/en/ranch/1.7/manual/ranch_proxy_header.parse/index.html
+++ b/docs/en/ranch/1.7/manual/ranch_proxy_header.parse/index.html
@@ -131,6 +131,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -139,8 +141,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch_proxy_header/index.html b/docs/en/ranch/1.7/manual/ranch_proxy_header/index.html
index ad564bf8..3c9b33ce 100644
--- a/docs/en/ranch/1.7/manual/ranch_proxy_header/index.html
+++ b/docs/en/ranch/1.7/manual/ranch_proxy_header/index.html
@@ -214,6 +214,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -222,8 +224,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch_ssl/index.html b/docs/en/ranch/1.7/manual/ranch_ssl/index.html
index d470490d..03e1c65c 100644
--- a/docs/en/ranch/1.7/manual/ranch_ssl/index.html
+++ b/docs/en/ranch/1.7/manual/ranch_ssl/index.html
@@ -277,6 +277,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -285,8 +287,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch_tcp/index.html b/docs/en/ranch/1.7/manual/ranch_tcp/index.html
index 41b43189..5c098b60 100644
--- a/docs/en/ranch/1.7/manual/ranch_tcp/index.html
+++ b/docs/en/ranch/1.7/manual/ranch_tcp/index.html
@@ -224,6 +224,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -232,8 +234,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch_transport.sendfile/index.html b/docs/en/ranch/1.7/manual/ranch_transport.sendfile/index.html
index 1c2b1e9c..95f76cda 100644
--- a/docs/en/ranch/1.7/manual/ranch_transport.sendfile/index.html
+++ b/docs/en/ranch/1.7/manual/ranch_transport.sendfile/index.html
@@ -160,6 +160,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -168,8 +170,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.7/manual/ranch_transport/index.html b/docs/en/ranch/1.7/manual/ranch_transport/index.html
index c03e5d3d..c6ac5e56 100644
--- a/docs/en/ranch/1.7/manual/ranch_transport/index.html
+++ b/docs/en/ranch/1.7/manual/ranch_transport/index.html
@@ -325,6 +325,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -333,8 +335,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/guide/embedded/index.html b/docs/en/ranch/1.8/guide/embedded/index.html
index f217a78c..ecbbb656 100644
--- a/docs/en/ranch/1.8/guide/embedded/index.html
+++ b/docs/en/ranch/1.8/guide/embedded/index.html
@@ -142,6 +142,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -150,8 +152,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/guide/index.html b/docs/en/ranch/1.8/guide/index.html
index 9760e234..19333646 100644
--- a/docs/en/ranch/1.8/guide/index.html
+++ b/docs/en/ranch/1.8/guide/index.html
@@ -131,6 +131,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -139,8 +141,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/guide/internals/index.html b/docs/en/ranch/1.8/guide/internals/index.html
index 1fe14387..2fac5f10 100644
--- a/docs/en/ranch/1.8/guide/internals/index.html
+++ b/docs/en/ranch/1.8/guide/internals/index.html
@@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -154,8 +156,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/guide/introduction/index.html b/docs/en/ranch/1.8/guide/introduction/index.html
index a7ae89f8..8d6ec685 100644
--- a/docs/en/ranch/1.8/guide/introduction/index.html
+++ b/docs/en/ranch/1.8/guide/introduction/index.html
@@ -125,6 +125,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -133,8 +135,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/guide/listeners/index.html b/docs/en/ranch/1.8/guide/listeners/index.html
index 7614cbd3..a82038ec 100644
--- a/docs/en/ranch/1.8/guide/listeners/index.html
+++ b/docs/en/ranch/1.8/guide/listeners/index.html
@@ -361,6 +361,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -369,8 +371,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/guide/migrating_from_1.5/index.html b/docs/en/ranch/1.8/guide/migrating_from_1.5/index.html
index db170a9d..804ed5aa 100644
--- a/docs/en/ranch/1.8/guide/migrating_from_1.5/index.html
+++ b/docs/en/ranch/1.8/guide/migrating_from_1.5/index.html
@@ -161,6 +161,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -169,8 +171,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/guide/migrating_from_1.6/index.html b/docs/en/ranch/1.8/guide/migrating_from_1.6/index.html
index 9d2c5e17..98e3864d 100644
--- a/docs/en/ranch/1.8/guide/migrating_from_1.6/index.html
+++ b/docs/en/ranch/1.8/guide/migrating_from_1.6/index.html
@@ -141,6 +141,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -149,8 +151,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/guide/migrating_from_1.7/index.html b/docs/en/ranch/1.8/guide/migrating_from_1.7/index.html
index 1aa9376c..51eb93d1 100644
--- a/docs/en/ranch/1.8/guide/migrating_from_1.7/index.html
+++ b/docs/en/ranch/1.8/guide/migrating_from_1.7/index.html
@@ -125,6 +125,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -133,8 +135,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/guide/migrating_from_1.x/index.html b/docs/en/ranch/1.8/guide/migrating_from_1.x/index.html
index ba0cbeb5..0c85e403 100644
--- a/docs/en/ranch/1.8/guide/migrating_from_1.x/index.html
+++ b/docs/en/ranch/1.8/guide/migrating_from_1.x/index.html
@@ -214,6 +214,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -222,8 +224,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/guide/parsers/index.html b/docs/en/ranch/1.8/guide/parsers/index.html
index 6bb5cde8..e7bfefe8 100644
--- a/docs/en/ranch/1.8/guide/parsers/index.html
+++ b/docs/en/ranch/1.8/guide/parsers/index.html
@@ -181,6 +181,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -189,8 +191,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/guide/protocols/index.html b/docs/en/ranch/1.8/guide/protocols/index.html
index 427423c2..d36c311b 100644
--- a/docs/en/ranch/1.8/guide/protocols/index.html
+++ b/docs/en/ranch/1.8/guide/protocols/index.html
@@ -188,6 +188,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -196,8 +198,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/guide/ssl_auth/index.html b/docs/en/ranch/1.8/guide/ssl_auth/index.html
index f63a2040..9d08e9b4 100644
--- a/docs/en/ranch/1.8/guide/ssl_auth/index.html
+++ b/docs/en/ranch/1.8/guide/ssl_auth/index.html
@@ -194,6 +194,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -202,8 +204,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/guide/transports/index.html b/docs/en/ranch/1.8/guide/transports/index.html
index aa0274f4..556cb66e 100644
--- a/docs/en/ranch/1.8/guide/transports/index.html
+++ b/docs/en/ranch/1.8/guide/transports/index.html
@@ -228,6 +228,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -236,8 +238,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/guide/upcoming_2.0_changes/index.html b/docs/en/ranch/1.8/guide/upcoming_2.0_changes/index.html
index 59c70a06..aea6fbd6 100644
--- a/docs/en/ranch/1.8/guide/upcoming_2.0_changes/index.html
+++ b/docs/en/ranch/1.8/guide/upcoming_2.0_changes/index.html
@@ -135,6 +135,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -143,8 +145,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/index.html b/docs/en/ranch/1.8/manual/index.html
index feaaaf49..a19b87e7 100644
--- a/docs/en/ranch/1.8/manual/index.html
+++ b/docs/en/ranch/1.8/manual/index.html
@@ -141,6 +141,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -149,8 +151,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.child_spec/index.html b/docs/en/ranch/1.8/manual/ranch.child_spec/index.html
index 768ec5ab..d450cc48 100644
--- a/docs/en/ranch/1.8/manual/ranch.child_spec/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.child_spec/index.html
@@ -159,6 +159,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -167,8 +169,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.get_addr/index.html b/docs/en/ranch/1.8/manual/ranch.get_addr/index.html
index 75c68874..01f76417 100644
--- a/docs/en/ranch/1.8/manual/ranch.get_addr/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.get_addr/index.html
@@ -127,6 +127,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -135,8 +137,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.get_max_connections/index.html b/docs/en/ranch/1.8/manual/ranch.get_max_connections/index.html
index a5725f25..99bbb4a4 100644
--- a/docs/en/ranch/1.8/manual/ranch.get_max_connections/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.get_max_connections/index.html
@@ -125,6 +125,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -133,8 +135,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.get_port/index.html b/docs/en/ranch/1.8/manual/ranch.get_port/index.html
index 654e1bf0..d5f9aef4 100644
--- a/docs/en/ranch/1.8/manual/ranch.get_port/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.get_port/index.html
@@ -126,6 +126,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -134,8 +136,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.get_protocol_options/index.html b/docs/en/ranch/1.8/manual/ranch.get_protocol_options/index.html
index fb328f7f..242483f7 100644
--- a/docs/en/ranch/1.8/manual/ranch.get_protocol_options/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.get_protocol_options/index.html
@@ -125,6 +125,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -133,8 +135,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.get_status/index.html b/docs/en/ranch/1.8/manual/ranch.get_status/index.html
index c40608d1..24614cf0 100644
--- a/docs/en/ranch/1.8/manual/ranch.get_status/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.get_status/index.html
@@ -128,6 +128,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -136,8 +138,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.get_transport_options/index.html b/docs/en/ranch/1.8/manual/ranch.get_transport_options/index.html
index fea15783..9d471dc1 100644
--- a/docs/en/ranch/1.8/manual/ranch.get_transport_options/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.get_transport_options/index.html
@@ -125,6 +125,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -133,8 +135,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.handshake/index.html b/docs/en/ranch/1.8/manual/ranch.handshake/index.html
index 0397df7b..eba63df5 100644
--- a/docs/en/ranch/1.8/manual/ranch.handshake/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.handshake/index.html
@@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -156,8 +158,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.info/index.html b/docs/en/ranch/1.8/manual/ranch.info/index.html
index 36ca7392..43af3ff6 100644
--- a/docs/en/ranch/1.8/manual/ranch.info/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.info/index.html
@@ -173,6 +173,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -181,8 +183,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.procs/index.html b/docs/en/ranch/1.8/manual/ranch.procs/index.html
index e72bfd83..4ab4cfb9 100644
--- a/docs/en/ranch/1.8/manual/ranch.procs/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.procs/index.html
@@ -136,6 +136,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -144,8 +146,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.recv_proxy_header/index.html b/docs/en/ranch/1.8/manual/ranch.recv_proxy_header/index.html
index 91874776..31ea3a39 100644
--- a/docs/en/ranch/1.8/manual/ranch.recv_proxy_header/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.recv_proxy_header/index.html
@@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -154,8 +156,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.remove_connection/index.html b/docs/en/ranch/1.8/manual/ranch.remove_connection/index.html
index fd9e107a..14b25dbd 100644
--- a/docs/en/ranch/1.8/manual/ranch.remove_connection/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.remove_connection/index.html
@@ -126,6 +126,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -134,8 +136,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.resume_listener/index.html b/docs/en/ranch/1.8/manual/ranch.resume_listener/index.html
index cc3eda7d..3e046a78 100644
--- a/docs/en/ranch/1.8/manual/ranch.resume_listener/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.resume_listener/index.html
@@ -132,6 +132,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -140,8 +142,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.set_max_connections/index.html b/docs/en/ranch/1.8/manual/ranch.set_max_connections/index.html
index 7a5d226b..202bd8ac 100644
--- a/docs/en/ranch/1.8/manual/ranch.set_max_connections/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.set_max_connections/index.html
@@ -130,6 +130,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -138,8 +140,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.set_protocol_options/index.html b/docs/en/ranch/1.8/manual/ranch.set_protocol_options/index.html
index 3e4e4632..bfaaafcc 100644
--- a/docs/en/ranch/1.8/manual/ranch.set_protocol_options/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.set_protocol_options/index.html
@@ -130,6 +130,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -138,8 +140,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.set_transport_options/index.html b/docs/en/ranch/1.8/manual/ranch.set_transport_options/index.html
index 9b174655..aede9fc2 100644
--- a/docs/en/ranch/1.8/manual/ranch.set_transport_options/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.set_transport_options/index.html
@@ -135,6 +135,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -143,8 +145,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.start_listener/index.html b/docs/en/ranch/1.8/manual/ranch.start_listener/index.html
index 9a4d173d..e4d3418c 100644
--- a/docs/en/ranch/1.8/manual/ranch.start_listener/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.start_listener/index.html
@@ -184,6 +184,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -192,8 +194,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.stop_listener/index.html b/docs/en/ranch/1.8/manual/ranch.stop_listener/index.html
index f5e820b2..37676c28 100644
--- a/docs/en/ranch/1.8/manual/ranch.stop_listener/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.stop_listener/index.html
@@ -129,6 +129,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -137,8 +139,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.suspend_listener/index.html b/docs/en/ranch/1.8/manual/ranch.suspend_listener/index.html
index 61549a9c..a509cc61 100644
--- a/docs/en/ranch/1.8/manual/ranch.suspend_listener/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.suspend_listener/index.html
@@ -133,6 +133,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -141,8 +143,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch.wait_for_connections/index.html b/docs/en/ranch/1.8/manual/ranch.wait_for_connections/index.html
index 7a661190..c2ac44ed 100644
--- a/docs/en/ranch/1.8/manual/ranch.wait_for_connections/index.html
+++ b/docs/en/ranch/1.8/manual/ranch.wait_for_connections/index.html
@@ -153,6 +153,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -161,8 +163,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch/index.html b/docs/en/ranch/1.8/manual/ranch/index.html
index b12eadbc..5dafb28b 100644
--- a/docs/en/ranch/1.8/manual/ranch/index.html
+++ b/docs/en/ranch/1.8/manual/ranch/index.html
@@ -202,7 +202,7 @@ http://www.gnu.org/software/src-highlite -->
</li>
</ul>
<h2 id="_see_also">See also</h2>
-<p><a href="../ranch_app">ranch(7)</a></p>
+<p><a href="..">ranch(7)</a></p>
@@ -238,6 +238,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -246,8 +248,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch_app/index.html b/docs/en/ranch/1.8/manual/ranch_app/index.html
index 95a21bc1..88e73a3d 100644
--- a/docs/en/ranch/1.8/manual/ranch_app/index.html
+++ b/docs/en/ranch/1.8/manual/ranch_app/index.html
@@ -141,6 +141,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -149,8 +151,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch_protocol/index.html b/docs/en/ranch/1.8/manual/ranch_protocol/index.html
index 9607bb31..5a6721c9 100644
--- a/docs/en/ranch/1.8/manual/ranch_protocol/index.html
+++ b/docs/en/ranch/1.8/manual/ranch_protocol/index.html
@@ -89,7 +89,7 @@ http://www.gnu.org/software/src-highlite -->
</li>
</ul>
<h2 id="_see_also">See also</h2>
-<p><a href="../ranch.handshake">ranch:handshake(3)</a>, <a href="../ranch_app">ranch(7)</a></p>
+<p><a href="../ranch.handshake">ranch:handshake(3)</a>, <a href="..">ranch(7)</a></p>
@@ -125,6 +125,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -133,8 +135,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch_proxy_header.header/index.html b/docs/en/ranch/1.8/manual/ranch_proxy_header.header/index.html
index a8d3e9d0..93f1cb82 100644
--- a/docs/en/ranch/1.8/manual/ranch_proxy_header.header/index.html
+++ b/docs/en/ranch/1.8/manual/ranch_proxy_header.header/index.html
@@ -160,6 +160,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -168,8 +170,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch_proxy_header.parse/index.html b/docs/en/ranch/1.8/manual/ranch_proxy_header.parse/index.html
index 2489ce91..bb4d0f71 100644
--- a/docs/en/ranch/1.8/manual/ranch_proxy_header.parse/index.html
+++ b/docs/en/ranch/1.8/manual/ranch_proxy_header.parse/index.html
@@ -131,6 +131,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -139,8 +141,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch_proxy_header/index.html b/docs/en/ranch/1.8/manual/ranch_proxy_header/index.html
index 3aae5bda..68a13091 100644
--- a/docs/en/ranch/1.8/manual/ranch_proxy_header/index.html
+++ b/docs/en/ranch/1.8/manual/ranch_proxy_header/index.html
@@ -178,7 +178,7 @@ http://www.gnu.org/software/src-highlite -->
</li>
</ul>
<h2 id="_see_also">See also</h2>
-<p><a href="../ranch_app">ranch(7)</a></p>
+<p><a href="..">ranch(7)</a></p>
@@ -214,6 +214,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -222,8 +224,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch_ssl/index.html b/docs/en/ranch/1.8/manual/ranch_ssl/index.html
index ff227404..b67b5281 100644
--- a/docs/en/ranch/1.8/manual/ranch_ssl/index.html
+++ b/docs/en/ranch/1.8/manual/ranch_ssl/index.html
@@ -241,7 +241,7 @@ http://www.gnu.org/software/src-highlite -->
<p>Note that the client will not send a certificate unless the value for the <code>verify</code> option is set to <code>verify_peer</code>. This means that <code>fail_if_no_peer_cert</code> only applies when combined with the <code>verify</code> option. The <code>verify_fun</code> option allows greater control over the client certificate validation.</p>
<p>The options <code>sni_fun</code> and <code>sni_hosts</code> are mutually exclusive.</p>
<h2 id="_see_also">See also</h2>
-<p><a href="../ranch_app">ranch(7)</a>, <a href="../ranch_transport">ranch_transport(3)</a>, <a href="../ranch_tcp">ranch_tcp(3)</a>, ssl(3)</p>
+<p><a href="..">ranch(7)</a>, <a href="../ranch_transport">ranch_transport(3)</a>, <a href="../ranch_tcp">ranch_tcp(3)</a>, ssl(3)</p>
@@ -277,6 +277,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -285,8 +287,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch_tcp/index.html b/docs/en/ranch/1.8/manual/ranch_tcp/index.html
index e23ed610..a5e8deef 100644
--- a/docs/en/ranch/1.8/manual/ranch_tcp/index.html
+++ b/docs/en/ranch/1.8/manual/ranch_tcp/index.html
@@ -188,7 +188,7 @@ http://www.gnu.org/software/src-highlite -->
</div></div>
<p>List of listen options.</p>
<h2 id="_see_also">See also</h2>
-<p><a href="../ranch_app">ranch(7)</a>, <a href="../ranch_transport">ranch_transport(3)</a>, <a href="../ranch_ssl">ranch_ssl(3)</a>, gen_tcp(3), inet(3)</p>
+<p><a href="..">ranch(7)</a>, <a href="../ranch_transport">ranch_transport(3)</a>, <a href="../ranch_ssl">ranch_ssl(3)</a>, gen_tcp(3), inet(3)</p>
@@ -224,6 +224,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -232,8 +234,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch_transport.sendfile/index.html b/docs/en/ranch/1.8/manual/ranch_transport.sendfile/index.html
index 86134512..741b8513 100644
--- a/docs/en/ranch/1.8/manual/ranch_transport.sendfile/index.html
+++ b/docs/en/ranch/1.8/manual/ranch_transport.sendfile/index.html
@@ -160,6 +160,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -168,8 +170,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.8/manual/ranch_transport/index.html b/docs/en/ranch/1.8/manual/ranch_transport/index.html
index add1765d..0871b6ae 100644
--- a/docs/en/ranch/1.8/manual/ranch_transport/index.html
+++ b/docs/en/ranch/1.8/manual/ranch_transport/index.html
@@ -289,7 +289,7 @@ http://www.gnu.org/software/src-highlite -->
</li>
</ul>
<h2 id="_see_also">See also</h2>
-<p><a href="../ranch_app">ranch(7)</a>, <a href="../ranch_tcp">ranch_tcp(3)</a>, <a href="../ranch_ssl">ranch_ssl(3)</a></p>
+<p><a href="..">ranch(7)</a>, <a href="../ranch_tcp">ranch_tcp(3)</a>, <a href="../ranch_ssl">ranch_ssl(3)</a></p>
@@ -325,6 +325,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -333,8 +335,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/guide/connection_draining/index.html b/docs/en/ranch/2.0/guide/connection_draining/index.html
index 3c3e2a00..ec39b4c5 100644
--- a/docs/en/ranch/2.0/guide/connection_draining/index.html
+++ b/docs/en/ranch/2.0/guide/connection_draining/index.html
@@ -198,6 +198,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -206,8 +208,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/guide/embedded/index.html b/docs/en/ranch/2.0/guide/embedded/index.html
index 77e08615..0abf4c25 100644
--- a/docs/en/ranch/2.0/guide/embedded/index.html
+++ b/docs/en/ranch/2.0/guide/embedded/index.html
@@ -139,6 +139,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -147,8 +149,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/guide/index.html b/docs/en/ranch/2.0/guide/index.html
index 2959cb6c..dd2624a9 100644
--- a/docs/en/ranch/2.0/guide/index.html
+++ b/docs/en/ranch/2.0/guide/index.html
@@ -131,6 +131,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -139,8 +141,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/guide/internals/index.html b/docs/en/ranch/2.0/guide/internals/index.html
index e0bb9256..5d5b98b3 100644
--- a/docs/en/ranch/2.0/guide/internals/index.html
+++ b/docs/en/ranch/2.0/guide/internals/index.html
@@ -147,6 +147,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -155,8 +157,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/guide/introduction/index.html b/docs/en/ranch/2.0/guide/introduction/index.html
index b9fa77ca..ae5552dc 100644
--- a/docs/en/ranch/2.0/guide/introduction/index.html
+++ b/docs/en/ranch/2.0/guide/introduction/index.html
@@ -125,6 +125,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -133,8 +135,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/guide/listeners/index.html b/docs/en/ranch/2.0/guide/listeners/index.html
index 1a50fe1c..c67f51a3 100644
--- a/docs/en/ranch/2.0/guide/listeners/index.html
+++ b/docs/en/ranch/2.0/guide/listeners/index.html
@@ -388,6 +388,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -396,8 +398,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/guide/migrating_from_1.5/index.html b/docs/en/ranch/2.0/guide/migrating_from_1.5/index.html
index b86e59d2..766206dc 100644
--- a/docs/en/ranch/2.0/guide/migrating_from_1.5/index.html
+++ b/docs/en/ranch/2.0/guide/migrating_from_1.5/index.html
@@ -161,6 +161,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -169,8 +171,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/guide/migrating_from_1.6/index.html b/docs/en/ranch/2.0/guide/migrating_from_1.6/index.html
index 9d717153..ca1ba8ef 100644
--- a/docs/en/ranch/2.0/guide/migrating_from_1.6/index.html
+++ b/docs/en/ranch/2.0/guide/migrating_from_1.6/index.html
@@ -141,6 +141,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -149,8 +151,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/guide/migrating_from_1.7/index.html b/docs/en/ranch/2.0/guide/migrating_from_1.7/index.html
index e5514929..2ac250ed 100644
--- a/docs/en/ranch/2.0/guide/migrating_from_1.7/index.html
+++ b/docs/en/ranch/2.0/guide/migrating_from_1.7/index.html
@@ -198,6 +198,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -206,8 +208,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/guide/migrating_from_1.x/index.html b/docs/en/ranch/2.0/guide/migrating_from_1.x/index.html
index 5b3585f3..a4483266 100644
--- a/docs/en/ranch/2.0/guide/migrating_from_1.x/index.html
+++ b/docs/en/ranch/2.0/guide/migrating_from_1.x/index.html
@@ -214,6 +214,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -222,8 +224,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/guide/parsers/index.html b/docs/en/ranch/2.0/guide/parsers/index.html
index e4106ea9..fbbf57fa 100644
--- a/docs/en/ranch/2.0/guide/parsers/index.html
+++ b/docs/en/ranch/2.0/guide/parsers/index.html
@@ -181,6 +181,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -189,8 +191,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/guide/protocols/index.html b/docs/en/ranch/2.0/guide/protocols/index.html
index f7e98c58..70bfc22a 100644
--- a/docs/en/ranch/2.0/guide/protocols/index.html
+++ b/docs/en/ranch/2.0/guide/protocols/index.html
@@ -188,6 +188,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -196,8 +198,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/guide/ssl_auth/index.html b/docs/en/ranch/2.0/guide/ssl_auth/index.html
index 5f3a2fa3..a4877c5c 100644
--- a/docs/en/ranch/2.0/guide/ssl_auth/index.html
+++ b/docs/en/ranch/2.0/guide/ssl_auth/index.html
@@ -194,6 +194,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -202,8 +204,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/guide/transports/index.html b/docs/en/ranch/2.0/guide/transports/index.html
index 5b5ee18e..e29de37c 100644
--- a/docs/en/ranch/2.0/guide/transports/index.html
+++ b/docs/en/ranch/2.0/guide/transports/index.html
@@ -228,6 +228,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -236,8 +238,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/index.html b/docs/en/ranch/2.0/manual/index.html
index 261556ba..2b7db009 100644
--- a/docs/en/ranch/2.0/manual/index.html
+++ b/docs/en/ranch/2.0/manual/index.html
@@ -141,6 +141,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -149,8 +151,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.child_spec/index.html b/docs/en/ranch/2.0/manual/ranch.child_spec/index.html
index 3348e51e..3b4ebb7f 100644
--- a/docs/en/ranch/2.0/manual/ranch.child_spec/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.child_spec/index.html
@@ -163,6 +163,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -171,8 +173,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.get_addr/index.html b/docs/en/ranch/2.0/manual/ranch.get_addr/index.html
index 69771ad5..1a718b21 100644
--- a/docs/en/ranch/2.0/manual/ranch.get_addr/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.get_addr/index.html
@@ -137,6 +137,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -145,8 +147,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.get_max_connections/index.html b/docs/en/ranch/2.0/manual/ranch.get_max_connections/index.html
index 13fc2150..6014e8bd 100644
--- a/docs/en/ranch/2.0/manual/ranch.get_max_connections/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.get_max_connections/index.html
@@ -129,6 +129,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -137,8 +139,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.get_port/index.html b/docs/en/ranch/2.0/manual/ranch.get_port/index.html
index eed1a6d4..5d2fe4e7 100644
--- a/docs/en/ranch/2.0/manual/ranch.get_port/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.get_port/index.html
@@ -127,6 +127,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -135,8 +137,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.get_protocol_options/index.html b/docs/en/ranch/2.0/manual/ranch.get_protocol_options/index.html
index 85eece21..65fb1915 100644
--- a/docs/en/ranch/2.0/manual/ranch.get_protocol_options/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.get_protocol_options/index.html
@@ -125,6 +125,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -133,8 +135,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.get_status/index.html b/docs/en/ranch/2.0/manual/ranch.get_status/index.html
index 196e9497..7842e2ab 100644
--- a/docs/en/ranch/2.0/manual/ranch.get_status/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.get_status/index.html
@@ -128,6 +128,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -136,8 +138,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.get_transport_options/index.html b/docs/en/ranch/2.0/manual/ranch.get_transport_options/index.html
index a308bacd..7b9fa768 100644
--- a/docs/en/ranch/2.0/manual/ranch.get_transport_options/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.get_transport_options/index.html
@@ -125,6 +125,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -133,8 +135,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.handshake/index.html b/docs/en/ranch/2.0/manual/ranch.handshake/index.html
index 28b331c3..65ea7cc0 100644
--- a/docs/en/ranch/2.0/manual/ranch.handshake/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.handshake/index.html
@@ -151,6 +151,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -159,8 +161,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.handshake_cancel/index.html b/docs/en/ranch/2.0/manual/ranch.handshake_cancel/index.html
index 12311b26..1ae4e0a1 100644
--- a/docs/en/ranch/2.0/manual/ranch.handshake_cancel/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.handshake_cancel/index.html
@@ -138,6 +138,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -146,8 +148,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.handshake_continue/index.html b/docs/en/ranch/2.0/manual/ranch.handshake_continue/index.html
index 1121940d..dcc24648 100644
--- a/docs/en/ranch/2.0/manual/ranch.handshake_continue/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.handshake_continue/index.html
@@ -148,6 +148,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -156,8 +158,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.info/index.html b/docs/en/ranch/2.0/manual/ranch.info/index.html
index 266c8d56..a7175264 100644
--- a/docs/en/ranch/2.0/manual/ranch.info/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.info/index.html
@@ -174,6 +174,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -182,8 +184,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.procs/index.html b/docs/en/ranch/2.0/manual/ranch.procs/index.html
index e32bed48..b8b829d3 100644
--- a/docs/en/ranch/2.0/manual/ranch.procs/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.procs/index.html
@@ -136,6 +136,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -144,8 +146,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.recv_proxy_header/index.html b/docs/en/ranch/2.0/manual/ranch.recv_proxy_header/index.html
index 8f6119a7..d9e03bc0 100644
--- a/docs/en/ranch/2.0/manual/ranch.recv_proxy_header/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.recv_proxy_header/index.html
@@ -146,6 +146,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -154,8 +156,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.remove_connection/index.html b/docs/en/ranch/2.0/manual/ranch.remove_connection/index.html
index 332c443b..426a4c3f 100644
--- a/docs/en/ranch/2.0/manual/ranch.remove_connection/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.remove_connection/index.html
@@ -126,6 +126,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -134,8 +136,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.resume_listener/index.html b/docs/en/ranch/2.0/manual/ranch.resume_listener/index.html
index 4df6a268..d609a7a6 100644
--- a/docs/en/ranch/2.0/manual/ranch.resume_listener/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.resume_listener/index.html
@@ -132,6 +132,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -140,8 +142,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.set_max_connections/index.html b/docs/en/ranch/2.0/manual/ranch.set_max_connections/index.html
index 9c72ff6c..a610f0fc 100644
--- a/docs/en/ranch/2.0/manual/ranch.set_max_connections/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.set_max_connections/index.html
@@ -134,6 +134,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -142,8 +144,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.set_protocol_options/index.html b/docs/en/ranch/2.0/manual/ranch.set_protocol_options/index.html
index a917c3ae..c7aaaccb 100644
--- a/docs/en/ranch/2.0/manual/ranch.set_protocol_options/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.set_protocol_options/index.html
@@ -130,6 +130,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -138,8 +140,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.set_transport_options/index.html b/docs/en/ranch/2.0/manual/ranch.set_transport_options/index.html
index 1166b6f9..45647113 100644
--- a/docs/en/ranch/2.0/manual/ranch.set_transport_options/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.set_transport_options/index.html
@@ -169,6 +169,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -177,8 +179,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.start_listener/index.html b/docs/en/ranch/2.0/manual/ranch.start_listener/index.html
index a090c37c..ddb35d9a 100644
--- a/docs/en/ranch/2.0/manual/ranch.start_listener/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.start_listener/index.html
@@ -186,6 +186,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -194,8 +196,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.stop_listener/index.html b/docs/en/ranch/2.0/manual/ranch.stop_listener/index.html
index 00473f25..a5d050dc 100644
--- a/docs/en/ranch/2.0/manual/ranch.stop_listener/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.stop_listener/index.html
@@ -129,6 +129,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -137,8 +139,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.suspend_listener/index.html b/docs/en/ranch/2.0/manual/ranch.suspend_listener/index.html
index 99c935ce..66384980 100644
--- a/docs/en/ranch/2.0/manual/ranch.suspend_listener/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.suspend_listener/index.html
@@ -133,6 +133,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -141,8 +143,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch.wait_for_connections/index.html b/docs/en/ranch/2.0/manual/ranch.wait_for_connections/index.html
index 066c069e..08e29667 100644
--- a/docs/en/ranch/2.0/manual/ranch.wait_for_connections/index.html
+++ b/docs/en/ranch/2.0/manual/ranch.wait_for_connections/index.html
@@ -153,6 +153,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -161,8 +163,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch/index.html b/docs/en/ranch/2.0/manual/ranch/index.html
index a1a968bb..f2b5b720 100644
--- a/docs/en/ranch/2.0/manual/ranch/index.html
+++ b/docs/en/ranch/2.0/manual/ranch/index.html
@@ -249,6 +249,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -257,8 +259,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch_app/index.html b/docs/en/ranch/2.0/manual/ranch_app/index.html
index 5c3f9685..3ecbfb25 100644
--- a/docs/en/ranch/2.0/manual/ranch_app/index.html
+++ b/docs/en/ranch/2.0/manual/ranch_app/index.html
@@ -141,6 +141,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -149,8 +151,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch_protocol/index.html b/docs/en/ranch/2.0/manual/ranch_protocol/index.html
index b166cad2..a89a1a82 100644
--- a/docs/en/ranch/2.0/manual/ranch_protocol/index.html
+++ b/docs/en/ranch/2.0/manual/ranch_protocol/index.html
@@ -126,6 +126,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -134,8 +136,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch_proxy_header.header/index.html b/docs/en/ranch/2.0/manual/ranch_proxy_header.header/index.html
index e9d7ead3..126cd51a 100644
--- a/docs/en/ranch/2.0/manual/ranch_proxy_header.header/index.html
+++ b/docs/en/ranch/2.0/manual/ranch_proxy_header.header/index.html
@@ -160,6 +160,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -168,8 +170,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch_proxy_header.parse/index.html b/docs/en/ranch/2.0/manual/ranch_proxy_header.parse/index.html
index 431c6bf1..6caa89b6 100644
--- a/docs/en/ranch/2.0/manual/ranch_proxy_header.parse/index.html
+++ b/docs/en/ranch/2.0/manual/ranch_proxy_header.parse/index.html
@@ -131,6 +131,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -139,8 +141,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch_proxy_header/index.html b/docs/en/ranch/2.0/manual/ranch_proxy_header/index.html
index cbb3303e..f25c7c20 100644
--- a/docs/en/ranch/2.0/manual/ranch_proxy_header/index.html
+++ b/docs/en/ranch/2.0/manual/ranch_proxy_header/index.html
@@ -214,6 +214,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -222,8 +224,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch_ssl/index.html b/docs/en/ranch/2.0/manual/ranch_ssl/index.html
index 34757b18..090cd152 100644
--- a/docs/en/ranch/2.0/manual/ranch_ssl/index.html
+++ b/docs/en/ranch/2.0/manual/ranch_ssl/index.html
@@ -324,6 +324,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -332,8 +334,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch_tcp/index.html b/docs/en/ranch/2.0/manual/ranch_tcp/index.html
index 5d685585..af87b892 100644
--- a/docs/en/ranch/2.0/manual/ranch_tcp/index.html
+++ b/docs/en/ranch/2.0/manual/ranch_tcp/index.html
@@ -226,6 +226,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -234,8 +236,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch_transport.sendfile/index.html b/docs/en/ranch/2.0/manual/ranch_transport.sendfile/index.html
index f27c3d2c..cbfa6cc5 100644
--- a/docs/en/ranch/2.0/manual/ranch_transport.sendfile/index.html
+++ b/docs/en/ranch/2.0/manual/ranch_transport.sendfile/index.html
@@ -160,6 +160,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -168,8 +170,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.0/manual/ranch_transport/index.html b/docs/en/ranch/2.0/manual/ranch_transport/index.html
index 0edb4039..e138261e 100644
--- a/docs/en/ranch/2.0/manual/ranch_transport/index.html
+++ b/docs/en/ranch/2.0/manual/ranch_transport/index.html
@@ -367,6 +367,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -375,8 +377,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.1/guide/connection_draining.asciidoc b/docs/en/ranch/2.1/guide/connection_draining.asciidoc
new file mode 100644
index 00000000..2ccdbc84
--- /dev/null
+++ b/docs/en/ranch/2.1/guide/connection_draining.asciidoc
@@ -0,0 +1,98 @@
+== Connection draining
+
+Stopping a Ranch listener via `ranch:stop_listener/1` will invariably kill
+all connection processes the listener hosts. However, you may want to stop
+a listener in a graceful fashion, ie by not accepting any new connections,
+but allowing the existing connection processes to exit by themselves instead
+of being killed.
+
+For this purpose, you should first suspend the listener you wish to
+stop gracefully, and then wait for its connection count to drop to
+zero.
+
+.Draining a single listener
+
+[source,erlang]
+----
+ok = ranch:suspend_listener(Ref),
+ok = ranch:wait_for_connections(Ref, '==', 0),
+ok = ranch:stop_listener(Ref).
+----
+
+If you want to drain more than just one listener, it may be important to first suspend
+them all before beginning to wait for their connection counts to reach zero. Otherwise,
+the not yet suspended listeners will still be accepting connections while you wait for
+the suspended ones to be drained.
+
+.Draining multiple listeners
+
+[source,erlang]
+----
+lists:foreach(
+ fun (Ref) ->
+ ok = ranch:suspend_listener(Ref)
+ end,
+ Refs
+),
+lists:foreach(
+ fun (Ref) ->
+ ok = ranch:wait_for_connections(Ref, '==', 0),
+ ok = ranch:stop_listener(Ref)
+ end,
+ Refs
+).
+----
+
+If you have long-running connection processes hosted by the listener you want to stop
+gracefully, draining may take a long time, possibly forever. If you just want to give
+the connection processes a chance to finish, but are not willing to wait for infinity,
+the waiting part could be handled in a separate process.
+
+.Draining a listener with a timeout
+
+[source,erlang]
+----
+ok = ranch:suspend_listener(Ref),
+{DrainPid, DrainRef} = spawn_monitor(
+ fun () ->
+ ok = ranch:wait_for_connections(Ref, '==', 0)
+ end
+),
+receive
+ {'DOWN', DrainRef, process, DrainPid, _} ->
+ ok
+after DrainTimeout ->
+ exit(DrainPid, kill),
+ ok
+end,
+ok = ranch:stop_listener(Ref).
+----
+
+To drain listeners automatically as part of your application shutdown routine,
+use the `prep_stop/1` function of your application module.
+
+.Draining listeners automatically on application shutdown
+
+[source,erlang]
+----
+-module(my_app).
+
+-behavior(application).
+
+-export([start/2]).
+-export([prep_stop/1]).
+-export([stop/1]).
+
+start(_StartType, _StartArgs) ->
+ {ok, _} = ranch:start_listener(my_listener, ranch_tcp, #{}, my_protocol, []),
+ my_app_sup:start_link().
+
+prep_stop(State) ->
+ ok = ranch:suspend_listener(my_listener),
+ ok = ranch:wait_for_connections(my_listener, '==', 0),
+ ok = ranch:stop_listener(my_listener),
+ State.
+
+stop(_State) ->
+ ok.
+----
diff --git a/docs/en/ranch/2.1/guide/connection_draining/index.html b/docs/en/ranch/2.1/guide/connection_draining/index.html
new file mode 100644
index 00000000..52a279f3
--- /dev/null
+++ b/docs/en/ranch/2.1/guide/connection_draining/index.html
@@ -0,0 +1,258 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: Connection draining</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>Connection draining</span></h1>
+
+<p>Stopping a Ranch listener via <code>ranch:stop_listener/1</code> will invariably kill all connection processes the listener hosts. However, you may want to stop a listener in a graceful fashion, ie by not accepting any new connections, but allowing the existing connection processes to exit by themselves instead of being killed.</p>
+<p>For this purpose, you should first suspend the listener you wish to stop gracefully, and then wait for its connection count to drop to zero.</p>
+<div class="listingblock"><div class="title">Draining a single listener</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:suspend_listener</font></b>(<font color="#009900">Ref</font>),
+<font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:wait_for_connections</font></b>(<font color="#009900">Ref</font>, <font color="#FF6600">'=='</font>, <font color="#993399">0</font>),
+<font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:stop_listener</font></b>(<font color="#009900">Ref</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<p>If you want to drain more than just one listener, it may be important to first suspend them all before beginning to wait for their connection counts to reach zero. Otherwise, the not yet suspended listeners will still be accepting connections while you wait for the suspended ones to be drained.</p>
+<div class="listingblock"><div class="title">Draining multiple listeners</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">lists:foreach</font></b>(
+ <b><font color="#0000FF">fun</font></b> (<font color="#009900">Ref</font>) <font color="#990000">-&gt;</font>
+ <font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:suspend_listener</font></b>(<font color="#009900">Ref</font>)
+ <b><font color="#0000FF">end</font></b>,
+ <font color="#009900">Refs</font>
+),
+<b><font color="#000000">lists:foreach</font></b>(
+ <b><font color="#0000FF">fun</font></b> (<font color="#009900">Ref</font>) <font color="#990000">-&gt;</font>
+ <font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:wait_for_connections</font></b>(<font color="#009900">Ref</font>, <font color="#FF6600">'=='</font>, <font color="#993399">0</font>),
+ <font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:stop_listener</font></b>(<font color="#009900">Ref</font>)
+ <b><font color="#0000FF">end</font></b>,
+ <font color="#009900">Refs</font>
+)<font color="#990000">.</font></tt></pre>
+</div></div>
+<p>If you have long-running connection processes hosted by the listener you want to stop gracefully, draining may take a long time, possibly forever. If you just want to give the connection processes a chance to finish, but are not willing to wait for infinity, the waiting part could be handled in a separate process.</p>
+<div class="listingblock"><div class="title">Draining a listener with a timeout</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:suspend_listener</font></b>(<font color="#009900">Ref</font>),
+{<font color="#009900">DrainPid</font>, <font color="#009900">DrainRef</font>} <font color="#990000">=</font> <b><font color="#000000">spawn_monitor</font></b>(
+ <b><font color="#0000FF">fun</font></b> () <font color="#990000">-&gt;</font>
+ <font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:wait_for_connections</font></b>(<font color="#009900">Ref</font>, <font color="#FF6600">'=='</font>, <font color="#993399">0</font>)
+ <b><font color="#0000FF">end</font></b>
+),
+<b><font color="#0000FF">receive</font></b>
+ {<font color="#FF6600">'DOWN'</font>, <font color="#009900">DrainRef</font>, <b><font color="#000080">process</font></b>, <font color="#009900">DrainPid</font>, <font color="#990000">_</font>} <font color="#990000">-&gt;</font>
+ <font color="#FF6600">ok</font>
+<b><font color="#0000FF">after</font></b> <font color="#009900">DrainTimeout</font> <font color="#990000">-&gt;</font>
+ <b><font color="#000080">exit</font></b>(<font color="#009900">DrainPid</font>, <b><font color="#000080">kill</font></b>),
+ <font color="#FF6600">ok</font>
+<b><font color="#0000FF">end</font></b>,
+<font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:stop_listener</font></b>(<font color="#009900">Ref</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<p>To drain listeners automatically as part of your application shutdown routine, use the <code>prep_stop/1</code> function of your application module.</p>
+<div class="listingblock"><div class="title">Draining listeners automatically on application shutdown</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000080">-module</font></b>(<font color="#FF6600">my_app</font>)<font color="#990000">.</font>
+
+<b><font color="#000080">-behavior</font></b>(<font color="#FF6600">application</font>)<font color="#990000">.</font>
+
+<b><font color="#000080">-export</font></b>([<b><font color="#000000">start</font></b><font color="#990000">/</font><font color="#993399">2</font>])<font color="#990000">.</font>
+<b><font color="#000080">-export</font></b>([<b><font color="#000000">prep_stop</font></b><font color="#990000">/</font><font color="#993399">1</font>])<font color="#990000">.</font>
+<b><font color="#000080">-export</font></b>([<b><font color="#000000">stop</font></b><font color="#990000">/</font><font color="#993399">1</font>])<font color="#990000">.</font>
+
+<b><font color="#000000">start</font></b>(<font color="#009900">_StartType</font>, <font color="#009900">_StartArgs</font>) <font color="#990000">-&gt;</font>
+ {<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:start_listener</font></b>(<font color="#FF6600">my_listener</font>, <font color="#FF6600">ranch_tcp</font>, #{}, <font color="#FF6600">my_protocol</font>, []),
+ <b><font color="#000000">my_app_sup:start_link</font></b>()<font color="#990000">.</font>
+
+<b><font color="#000000">prep_stop</font></b>(<font color="#009900">State</font>) <font color="#990000">-&gt;</font>
+ <font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:suspend_listener</font></b>(<font color="#FF6600">my_listener</font>),
+ <font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:wait_for_connections</font></b>(<font color="#FF6600">my_listener</font>, <font color="#FF6600">'=='</font>, <font color="#993399">0</font>),
+ <font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:stop_listener</font></b>(<font color="#FF6600">my_listener</font>),
+ <font color="#009900">State</font><font color="#990000">.</font>
+
+<b><font color="#000000">stop</font></b>(<font color="#009900">_State</font>) <font color="#990000">-&gt;</font>
+ <font color="#FF6600">ok</font><font color="#990000">.</font></tt></pre>
+</div></div>
+
+
+
+
+
+
+
+
+
+
+
+ <nav style="margin:1em 0">
+
+ <a style="float:left" href="https://ninenines.eu/docs/en/ranch/2.1/guide/ssl_auth/">
+ SSL client authentication
+ </a>
+
+
+
+ <a style="float:right" href="https://ninenines.eu/docs/en/ranch/2.1/guide/internals/">
+ Internals
+ </a>
+
+ </nav>
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+
+ User Guide
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/guide">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/guide/embedded.asciidoc b/docs/en/ranch/2.1/guide/embedded.asciidoc
new file mode 100644
index 00000000..28f567bc
--- /dev/null
+++ b/docs/en/ranch/2.1/guide/embedded.asciidoc
@@ -0,0 +1,47 @@
+== Embedded mode
+
+Embedded mode allows you to insert Ranch listeners directly
+in your supervision tree. This allows for greater fault tolerance
+control by permitting the shutdown of a listener due to the
+failure of another part of the application and vice versa.
+
+However, just as for non-embedded listeners that were started via
+`ranch:start_listener/5`, it is required that the `ranch` application
+is running before you can start embedded listeners. Furthermore,
+this also means that embedded listeners will restart when `ranch_sup` fails.
+
+WARNING: By using embedded mode, it is possible to start a listener with the same name
+as an already existing listener. This will corrupt the information Ranch
+keeps for that listener, so you should take care to ensure unique listener
+names yourself. A good way to achieve this is by combining the embedded
+listener's name with `?MODULE`, or the name of the application it is used
+in.
+
+=== Embedding
+
+To embed Ranch in your application you can simply add the child specs
+to your supervision tree. This can all be done in the `init/1` function
+of one of your application supervisors.
+
+Ranch has a convenience function for getting the listeners child specs
+called `ranch:child_spec/5`, that works like `ranch:start_listener/5`,
+except that it doesn't start anything, it only returns child specs.
+
+The following example adds one listener to another application's
+supervision tree.
+
+.Embed Ranch directly in your supervision tree
+
+[source,erlang]
+----
+init([]) ->
+ ListenerSpec = ranch:child_spec({?MODULE, echo},
+ ranch_tcp, #{socket_opts => [{port, 5555}]},
+ echo_protocol, []
+ ),
+ {ok, {#{}, [ListenerSpec]}}.
+----
+
+Embedded listeners cannot be stopped via `ranch:stop_listener/1`. Instead,
+are to be stopped as part of the shutdown of your application's supervison
+tree.
diff --git a/docs/en/ranch/1.5/guide/embedded/index.html b/docs/en/ranch/2.1/guide/embedded/index.html
index 92bce4ec..7d8c0075 100644
--- a/docs/en/ranch/1.5/guide/embedded/index.html
+++ b/docs/en/ranch/2.1/guide/embedded/index.html
@@ -63,28 +63,25 @@
<h1 class="lined-header"><span>Embedded mode</span></h1>
<p>Embedded mode allows you to insert Ranch listeners directly in your supervision tree. This allows for greater fault tolerance control by permitting the shutdown of a listener due to the failure of another part of the application and vice versa.</p>
+<p>However, just as for non-embedded listeners that were started via <code>ranch:start_listener/5</code>, it is required that the <code>ranch</code> application is running before you can start embedded listeners. Furthermore, this also means that embedded listeners will restart when <code>ranch_sup</code> fails.</p>
+<p>WARNING: By using embedded mode, it is possible to start a listener with the same name as an already existing listener. This will corrupt the information Ranch keeps for that listener, so you should take care to ensure unique listener names yourself. A good way to achieve this is by combining the embedded listener&apos;s name with <code>?MODULE</code>, or the name of the application it is used in.</p>
<h2 id="_embedding">Embedding</h2>
<p>To embed Ranch in your application you can simply add the child specs to your supervision tree. This can all be done in the <code>init/1</code> function of one of your application supervisors.</p>
-<p>Ranch requires at the minimum two kinds of child specs for embedding. First, you need to add <code>ranch_sup</code> to your supervision tree, only once, regardless of the number of listeners you will use. Then you need to add the child specs for each listener.</p>
<p>Ranch has a convenience function for getting the listeners child specs called <code>ranch:child_spec/5</code>, that works like <code>ranch:start_listener/5</code>, except that it doesn&apos;t start anything, it only returns child specs.</p>
-<p>As for <code>ranch_sup</code>, the child spec is simple enough to not require a convenience function.</p>
-<p>The following example adds both <code>ranch_sup</code> and one listener to another application&apos;s supervision tree.</p>
+<p>The following example adds one listener to another application&apos;s supervision tree.</p>
<div class="listingblock"><div class="title">Embed Ranch directly in your supervision tree</div>
<div class="content"><!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000000">init</font></b>([]) <font color="#990000">-&gt;</font>
- <font color="#009900">RanchSupSpec</font> <font color="#990000">=</font> {<font color="#FF6600">ranch_sup</font>, {<font color="#FF6600">ranch_sup</font>, <font color="#FF6600">start_link</font>, []},
- <font color="#FF6600">permanent</font>, <font color="#993399">5000</font>, <font color="#FF6600">supervisor</font>, [<font color="#FF6600">ranch_sup</font>]},
- <font color="#009900">ListenerSpec</font> <font color="#990000">=</font> <b><font color="#000000">ranch:child_spec</font></b>(<font color="#FF6600">echo</font>, <font color="#993399">100</font>,
- <font color="#FF6600">ranch_tcp</font>, [{<font color="#FF6600">port</font>, <font color="#993399">5555</font>}],
+ <font color="#009900">ListenerSpec</font> <font color="#990000">=</font> <b><font color="#000000">ranch:child_spec</font></b>({<b><font color="#000080">?MODULE</font></b>, <font color="#FF6600">echo</font>},
+ <font color="#FF6600">ranch_tcp</font>, #{<font color="#0000FF">socket_opts</font> <font color="#990000">=&gt;</font> [{<font color="#FF6600">port</font>, <font color="#993399">5555</font>}]},
<font color="#FF6600">echo_protocol</font>, []
),
- {<font color="#FF6600">ok</font>, {{<font color="#FF6600">one_for_one</font>, <font color="#993399">10</font>, <font color="#993399">10</font>}, [<font color="#009900">RanchSupSpec</font>, <font color="#009900">ListenerSpec</font>]}}<font color="#990000">.</font></tt></pre>
+ {<font color="#FF6600">ok</font>, {#{}, [<font color="#009900">ListenerSpec</font>]}}<font color="#990000">.</font></tt></pre>
</div></div>
-<p>Remember, you can add as many listener child specs as needed, but only one <code>ranch_sup</code> spec!</p>
-<p>It is recommended that your architecture makes sure that all listeners are restarted if <code>ranch_sup</code> fails. See the Ranch internals chapter for more details on how Ranch does it.</p>
+<p>Embedded listeners cannot be stopped via <code>ranch:stop_listener/1</code>. Instead, are to be stopped as part of the shutdown of your application&apos;s supervison tree.</p>
@@ -98,13 +95,13 @@ http://www.gnu.org/software/src-highlite -->
<nav style="margin:1em 0">
- <a style="float:left" href="https://ninenines.eu/docs/en/ranch/1.5/guide/protocols/">
+ <a style="float:left" href="https://ninenines.eu/docs/en/ranch/2.1/guide/protocols/">
Protocols
</a>
- <a style="float:right" href="https://ninenines.eu/docs/en/ranch/1.5/guide/parsers/">
+ <a style="float:right" href="https://ninenines.eu/docs/en/ranch/2.1/guide/parsers/">
Writing parsers
</a>
@@ -120,17 +117,17 @@ http://www.gnu.org/software/src-highlite -->
<h3>
Ranch
- 1.5
+ 2.1
User Guide
</h3>
<ul>
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
</ul>
@@ -142,6 +139,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -150,8 +149,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.5/guide/index.html b/docs/en/ranch/2.1/guide/index.html
index d9046ef3..016fe7dd 100644
--- a/docs/en/ranch/1.5/guide/index.html
+++ b/docs/en/ranch/2.1/guide/index.html
@@ -62,6 +62,7 @@
<h1 class="lined-header"><span>Ranch User Guide</span></h1>
+<h2 id="_interface">Interface</h2>
<ul><li><a href="introduction/">Introduction</a>
</li>
<li><a href="listeners/">Listeners</a>
@@ -72,11 +73,29 @@
</li>
<li><a href="embedded/">Embedded mode</a>
</li>
-<li><a href="parsers/">Writing parsers</a>
+</ul>
+<h2 id="_how_to">How to</h2>
+<ul><li><a href="parsers/">Writing parsers</a>
</li>
<li><a href="ssl_auth/">SSL client authentication</a>
</li>
-<li><a href="internals/">Internals</a>
+<li><a href="connection_draining/">Connection draining</a>
+</li>
+</ul>
+<h2 id="_advanced">Advanced</h2>
+<ul><li><a href="internals/">Internals</a>
+</li>
+</ul>
+<h2 id="_additional_information">Additional information</h2>
+<ul><li><a href="migrating_from_2.0/">Migrating from Ranch 2.0 to 2.1</a>
+</li>
+<li><a href="migrating_from_1.7/">Migrating from Ranch 1.7 to 2.0</a>
+</li>
+<li><a href="migrating_from_1.6/">Migrating from Ranch 1.6 to 1.7</a>
+</li>
+<li><a href="migrating_from_1.5/">Migrating from Ranch 1.5 to 1.6</a>
+</li>
+<li><a href="migrating_from_1.x/">Migrating from Ranch 1.x</a>
</li>
</ul>
@@ -92,17 +111,17 @@
<h3>
Ranch
- 1.5
+ 2.1
User Guide
</h3>
<ul>
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
</ul>
@@ -114,6 +133,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -122,8 +143,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.5/guide/internals.asciidoc b/docs/en/ranch/2.1/guide/internals.asciidoc
index c5bde58f..600920fc 100644
--- a/docs/en/ranch/1.5/guide/internals.asciidoc
+++ b/docs/en/ranch/2.1/guide/internals.asciidoc
@@ -10,6 +10,11 @@ matter to you. Generic benchmarks found on the web may or may not
be of use to you, you can never know until you benchmark your own
system.
+A third party dive into the internals of Ranch is available should
+you be interested: https://baozi.technology/ranch-under-the-hood/[Ranch: what's under the hood?]
+We make no claims with regard to its freshness or accuracy but this
+is a nice document to read along this section.
+
=== Architecture
Ranch is an OTP application.
diff --git a/docs/en/ranch/1.5/guide/internals/index.html b/docs/en/ranch/2.1/guide/internals/index.html
index 57e244db..35082102 100644
--- a/docs/en/ranch/1.5/guide/internals/index.html
+++ b/docs/en/ranch/2.1/guide/internals/index.html
@@ -64,6 +64,7 @@
<p>This chapter may not apply to embedded Ranch as embedding allows you to use an architecture specific to your application, which may or may not be compatible with the description of the Ranch application.</p>
<p>Note that for everything related to efficiency and performance, you should perform the benchmarks yourself to get the numbers that matter to you. Generic benchmarks found on the web may or may not be of use to you, you can never know until you benchmark your own system.</p>
+<p>A third party dive into the internals of Ranch is available should you be interested: <a href="https://baozi.technology/ranch-under-the-hood/">Ranch: what&apos;s under the hood?</a> We make no claims with regard to its freshness or accuracy but this is a nice document to read along this section.</p>
<h2 id="_architecture">Architecture</h2>
<p>Ranch is an OTP application.</p>
<p>Like all OTP applications, Ranch has a top supervisor. It is responsible for supervising the <code>ranch_server</code> process and all the listeners that will be started.</p>
@@ -102,12 +103,16 @@ http://www.gnu.org/software/src-highlite -->
<nav style="margin:1em 0">
- <a style="float:left" href="https://ninenines.eu/docs/en/ranch/1.5/guide/ssl_auth/">
- SSL client authentication
+ <a style="float:left" href="https://ninenines.eu/docs/en/ranch/2.1/guide/connection_draining/">
+ Connection draining
</a>
+ <a style="float:right" href="https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_2.0/">
+ Migrating from Ranch 2.0 to Ranch 2.1
+ </a>
+
</nav>
@@ -120,17 +125,17 @@ http://www.gnu.org/software/src-highlite -->
<h3>
Ranch
- 1.5
+ 2.1
User Guide
</h3>
<ul>
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
</ul>
@@ -142,6 +147,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -150,8 +157,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.5/guide/introduction.asciidoc b/docs/en/ranch/2.1/guide/introduction.asciidoc
index ac27862e..a682c46f 100644
--- a/docs/en/ranch/1.5/guide/introduction.asciidoc
+++ b/docs/en/ranch/2.1/guide/introduction.asciidoc
@@ -13,12 +13,9 @@ with socket programming and TCP protocols.
=== Supported platforms
-Ranch is tested and supported on Linux, FreeBSD, OSX and Windows.
+Ranch is tested and supported on Linux, FreeBSD, macOS and Windows.
-Ranch is developed for Erlang/OTP R16B+.
-
-There are known issues with the SSL application found in Erlang/OTP
-18.3.2 and 18.3.3. These versions are therefore not supported.
+Ranch is developed for Erlang/OTP 22+.
Ranch may be compiled on earlier Erlang versions with small source code
modifications but there is no guarantee that it will work as expected.
diff --git a/docs/en/ranch/1.5/guide/introduction/index.html b/docs/en/ranch/2.1/guide/introduction/index.html
index d5a2af7e..9c62fc75 100644
--- a/docs/en/ranch/1.5/guide/introduction/index.html
+++ b/docs/en/ranch/2.1/guide/introduction/index.html
@@ -67,9 +67,8 @@
<h2 id="_prerequisites">Prerequisites</h2>
<p>It is assumed the developer already knows Erlang and has some experience with socket programming and TCP protocols.</p>
<h2 id="_supported_platforms">Supported platforms</h2>
-<p>Ranch is tested and supported on Linux, FreeBSD, OSX and Windows.</p>
-<p>Ranch is developed for Erlang/OTP R16B+.</p>
-<p>There are known issues with the SSL application found in Erlang/OTP 18.3.2 and 18.3.3. These versions are therefore not supported.</p>
+<p>Ranch is tested and supported on Linux, FreeBSD, macOS and Windows.</p>
+<p>Ranch is developed for Erlang/OTP 22+.</p>
<p>Ranch may be compiled on earlier Erlang versions with small source code modifications but there is no guarantee that it will work as expected.</p>
<h2 id="_versioning">Versioning</h2>
<p>Ranch uses <a href="http://semver.org/">Semantic Versioning 2.0.0</a></p>
@@ -88,7 +87,7 @@
- <a style="float:right" href="https://ninenines.eu/docs/en/ranch/1.5/guide/listeners/">
+ <a style="float:right" href="https://ninenines.eu/docs/en/ranch/2.1/guide/listeners/">
Listeners
</a>
@@ -104,17 +103,17 @@
<h3>
Ranch
- 1.5
+ 2.1
User Guide
</h3>
<ul>
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
</ul>
@@ -126,6 +125,8 @@
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -134,8 +135,6 @@
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.5/guide/listeners.asciidoc b/docs/en/ranch/2.1/guide/listeners.asciidoc
index 97afa223..9ee2d987 100644
--- a/docs/en/ranch/1.5/guide/listeners.asciidoc
+++ b/docs/en/ranch/2.1/guide/listeners.asciidoc
@@ -19,7 +19,6 @@ A listener can be started and stopped at will.
When starting a listener, a number of different settings are required:
* A name to identify it locally and be able to interact with it.
-* The number of acceptors in the pool.
* A transport handler and its associated options.
* A protocol handler and its associated options.
@@ -43,8 +42,8 @@ to the `echo_protocol` handler.
[source,erlang]
{ok, _} = ranch:start_listener(tcp_echo,
- ranch_tcp, [{port, 5555}],
- echo_protocol, []
+ ranch_tcp, #{socket_opts => [{port, 5555}]},
+ echo_protocol, []
).
You can try this out by compiling and running the `tcp_echo` example in the
@@ -91,15 +90,43 @@ named `tcp_echo`. We can now stop it.
[source,erlang]
ranch:stop_listener(tcp_echo).
+=== Suspending and resuming a listener
+
+Listeners can be suspended and resumed by calling
+`ranch:suspend_listener/1` and `ranch:resume_listener/1`,
+respectively, with the name of the listener as argument.
+
+Suspending a listener will cause it to stop listening and not accept
+new connections, but existing connection processes will not be stopped.
+
+.Suspending a listener
+
+[source,erlang]
+ranch:suspend_listener(tcp_echo).
+
+Resuming a listener will cause it to start listening and accept new
+connections again.
+It is worth mentioning, however, that if the listener is configured
+to listen on a random port, it will listen on a different port than
+before it was suspended.
+
+.Resuming a listener
+
+[source,erlang]
+ranch:resume_listener(tcp_echo).
+
+Whether a listener is currently running or suspended can be queried
+by calling `ranch:get_status/1` with the listener name as argument.
+
=== Default transport options
By default the socket will be set to return `binary` data, with the
options `{active, false}`, `{packet, raw}`, `{reuseaddr, true}` set.
-These values can't be overriden when starting the listener, but
-they can be overriden using `Transport:setopts/2` in the protocol.
+These values can't be overridden when starting the listener, but
+they can be overridden using `Transport:setopts/2` in the protocol.
It will also set `{backlog, 1024}` and `{nodelay, true}`, which
-can be overriden at listener startup.
+can be overridden at listener startup.
=== Listening on a random port
@@ -114,8 +141,8 @@ argument is the name of the listener you gave in `ranch:start_listener/5`.
[source,erlang]
{ok, _} = ranch:start_listener(tcp_echo,
- ranch_tcp, [{port, 0}],
- echo_protocol, []
+ ranch_tcp, #{socket_opts => [{port, 0}]},
+ echo_protocol, []
).
Port = ranch:get_port(tcp_echo).
@@ -132,36 +159,86 @@ We recommend the use of port rewriting for systems with a single server,
and load balancing for systems with multiple servers. Documenting these
solutions is however out of the scope of this guide.
+=== Listening on a UNIX Domain socket
+
+On UNIX systems, it is also possible to use Ranch to listen on a UNIX
+domain socket by specifying `{local, SocketFile}` for the `ip` socket
+option. In this case, the port must be set to 0 or omitted. The given
+file must not exist: Ranch must be able to create it.
+
+.Starting a listener for TCP connections on a UNIX Domain socket
+
+[source,erlang]
+{ok, _} = ranch:start_listener(tcp_echo,
+ ranch_tcp, #{socket_opts => [
+ {ip, {local, "/tmp/ranch_echo.sock"}},
+ {port, 0}
+ ]}, echo_protocol, []
+).
+
+=== Performing additional setup steps on a listening socket
+
+If it is necessary to perform additional setup steps on the listening
+socket, it is possible to specify a function with the transport option
+`post_listen_callback`. This function will be called after the listening
+socket has been created but before accepting connections on it,
+with the socket as the single argument.
+
+The function must return either the atom `ok`, after which the listener
+will start accepting connections on the socket, or a tuple
+`{error, Reason}` which will cause the listener to fail starting with
+`Reason`.
+
+.Setting permissions on a UNIX Domain socket file
+
+[source,erlang]
+----
+PostListenCb = fun (Sock) ->
+ case ranch_tcp:sockname(Sock) of
+ {ok, {local, SockFile}} ->
+ file:change_mode(SockFile, 8#777);
+ {ok, _} ->
+ ok;
+ Error = {error, _} ->
+ Error
+ end
+end,
+
+{ok, _} = ranch:start_listener(tcp_echo,
+ ranch_tcp, #{
+ socket_opts => [
+ {ip, {local, "/tmp/ranch_echo.sock"}},
+ {port, 0}],
+ post_listen_callback => PostListenCb},
+ echo_protocol, []
+).
+----
+
=== Accepting connections on an existing socket
-If you want to accept connections on an existing socket, you can use the
-`socket` transport option, which should just be the relevant data returned
-from the connect function for the transport or the underlying socket library
-(`gen_tcp:connect`, `ssl:connect`). The accept function will then be
-called on the passed in socket. You should connect the socket in
-`{active, false}` mode, as well.
-
-Note, however, that because of a bug in SSL, you cannot change ownership of an
-SSL listen socket prior to R16. Ranch will catch the error thrown, but the
-owner of the SSL socket will remain as whatever process created the socket.
-However, this will not affect accept behaviour unless the owner process dies,
-in which case the socket is closed. Therefore, to use this feature with SSL
-with an erlang release prior to R16, ensure that the SSL socket is opened in a
-persistant process.
+If you want to accept connections on an existing socket, you can write
+a custom `ranch_transport` implementation that fetches or otherwise
+acquires a listening socket in the `listen/1` callback and returns it
+in the form of `{ok, ListenSocket}`.
+
+The custom `listen/1` function must ensure that the listener process
+(usually the process calling it) is also made the controlling process
+of the socket it returns. Failing to do so will result in stop/start
+and suspend/resume not working properly for that listener.
=== Limiting the number of concurrent connections
The `max_connections` transport option allows you to limit the number
-of concurrent connections. It defaults to 1024. Its purpose is to
-prevent your system from being overloaded and ensuring all the
-connections are handled optimally.
+of concurrent connections per connection supervisor (see below).
+It defaults to 1024. Its purpose is to prevent your system from being
+overloaded and ensuring all the connections are handled optimally.
.Customizing the maximum number of concurrent connections
[source,erlang]
{ok, _} = ranch:start_listener(tcp_echo,
- ranch_tcp, [{port, 5555}, {max_connections, 100}],
- echo_protocol, []
+ ranch_tcp, #{socket_opts => [{port, 5555}], max_connections => 100},
+ echo_protocol, []
).
You can disable this limit by setting its value to the atom `infinity`.
@@ -170,8 +247,8 @@ You can disable this limit by setting its value to the atom `infinity`.
[source,erlang]
{ok, _} = ranch:start_listener(tcp_echo,
- ranch_tcp, [{port, 5555}, {max_connections, infinity}],
- echo_protocol, []
+ ranch_tcp, #{socket_opts => [{port, 5555}], max_connections => infinity},
+ echo_protocol, []
).
The maximum number of connections is a soft limit. In practice, it
@@ -199,8 +276,8 @@ with the name of the listener as the only argument.
[source,erlang]
ranch:remove_connection(Ref).
-As seen in the chapter covering protocols, this pid is received as the
-first argument of the protocol's `start_link/4` callback.
+As seen in the chapter covering protocols, this reference is received
+as the first argument of the protocol's `start_link/3` callback.
You can modify the `max_connections` value on a running listener by
using the `ranch:set_max_connections/2` function, with the name of the
@@ -227,10 +304,73 @@ measure to find the best value for your application.
[source,erlang]
{ok, _} = ranch:start_listener(tcp_echo,
- ranch_tcp, [{port, 5555}, {num_acceptors, 42}],
- echo_protocol, []
+ ranch_tcp, #{socket_opts => [{port, 5555}], num_acceptors => 42},
+ echo_protocol, []
).
+=== Customizing the number of connection supervisors
+
+By default Ranch will use one connection supervisor for each
+acceptor process (but not vice versa). Their task is to
+supervise the connection processes started by an acceptor.
+The number of connection supervisors can be tweaked.
+
+Note that the association between the individual acceptors and
+connection supervisors is fixed, meaning that acceptors will
+always use the same connection supervisor to start connection
+processes.
+
+.Specifying a custom number of connection supervisors
+
+[source,erlang]
+{ok, _} = ranch:start_listener(tcp_echo,
+ ranch_tcp, #{socket_opts => [{port, 5555}], num_conns_sups => 42},
+ echo_protocol, []
+).
+
+=== Setting connection count alarms
+
+The `alarms` transport option allows you to configure alarms
+which will be triggered when the number of connections tracked
+by one connection supervisor reaches or exceeds the defined treshold.
+
+The `alarms` transport option takes a map with alarm names as keys and alarm
+options as values.
+
+Any term is allowed as an alarm name.
+
+Alarm options include the alarm type and a treshold that, when reached,
+triggers the given callback. A cooldown prevents the alarm from being
+triggered too often.
+
+.Log warnings when the number of connections exceeds 100
+
+[source,erlang]
+----
+Alarms = #{
+ my_alarm => #{
+ type => num_connections,
+ treshold => 100,
+ callback => fun(Ref, Name, ConnSup, ConnPids]) ->
+ logger:warning("Warning (~s): "
+ "Supervisor ~s of listener ~s "
+ "has ~b connections",
+ [Name, Ref, ConnSup, length(ConnPids)])
+ end
+ }
+},
+{ok, _} = ranch:start_listener(tcp_echo,
+ ranch_tcp, #{alarms => Alarms, socket_opts => [{port, 5555}]},
+ echo_protocol, []
+).
+----
+
+In the example code, an alarm named `my_alarm` is defined, which will
+call the given function when the number of connections tracked
+by the connection supervisor reaches or exceeds 100. When the number of
+connections is still (or again) above 100 after the default cooldown
+period of 5 seconds, the alarm will trigger again.
+
=== When running out of file descriptors
Operating systems have limits on the number of sockets
@@ -296,6 +436,25 @@ calling `ranch:get_protocol_options/1`.
[source,erlang]
Opts = ranch:get_protocol_options(tcp_echo).
+=== Changing transport options
+
+Ranch allows you to change the transport options of a listener with
+the `ranch:set_transport_options/2` function, for example to change the
+number of acceptors or to make it listen on a different port.
+
+.Changing the transport options
+
+[source,erlang]
+ranch:set_transport_options(tcp_echo, NewOpts).
+
+You can retrieve the current transport options by calling
+`ranch:get_transport_options/1`.
+
+.Retrieving the current transport options
+
+[source,erlang]
+Opts = ranch:get_transport_options(tcp_echo).
+
=== Obtaining information about listeners
Ranch provides two functions for retrieving information about the
diff --git a/docs/en/ranch/1.5/guide/listeners/index.html b/docs/en/ranch/2.1/guide/listeners/index.html
index 6a8330a6..1a3bf448 100644
--- a/docs/en/ranch/1.5/guide/listeners/index.html
+++ b/docs/en/ranch/2.1/guide/listeners/index.html
@@ -70,8 +70,6 @@
<p>When starting a listener, a number of different settings are required:</p>
<ul><li>A name to identify it locally and be able to interact with it.
</li>
-<li>The number of acceptors in the pool.
-</li>
<li>A transport handler and its associated options.
</li>
<li>A protocol handler and its associated options.
@@ -93,8 +91,8 @@ by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt>{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:start_listener</font></b>(<font color="#FF6600">tcp_echo</font>,
- <font color="#FF6600">ranch_tcp</font>, [{<font color="#FF6600">port</font>, <font color="#993399">5555</font>}],
- <font color="#FF6600">echo_protocol</font>, []
+ <font color="#FF6600">ranch_tcp</font>, #{<font color="#0000FF">socket_opts</font> <font color="#990000">=&gt;</font> [{<font color="#FF6600">port</font>, <font color="#993399">5555</font>}]},
+ <font color="#FF6600">echo_protocol</font>, []
)<font color="#990000">.</font></tt></pre>
</div></div>
<p>You can try this out by compiling and running the <code>tcp_echo</code> example in the examples directory. To do so, open a shell in the <em>examples/tcp_echo/</em> directory and run the following command:</p>
@@ -133,9 +131,28 @@ http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000000">ranch:stop_listener</font></b>(<font color="#FF6600">tcp_echo</font>)<font color="#990000">.</font></tt></pre>
</div></div>
+<h2 id="_suspending_and_resuming_a_listener">Suspending and resuming a listener</h2>
+<p>Listeners can be suspended and resumed by calling <code>ranch:suspend_listener/1</code> and <code>ranch:resume_listener/1</code>, respectively, with the name of the listener as argument.</p>
+<p>Suspending a listener will cause it to stop listening and not accept new connections, but existing connection processes will not be stopped.</p>
+<div class="listingblock"><div class="title">Suspending a listener</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">ranch:suspend_listener</font></b>(<font color="#FF6600">tcp_echo</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<p>Resuming a listener will cause it to start listening and accept new connections again. It is worth mentioning, however, that if the listener is configured to listen on a random port, it will listen on a different port than before it was suspended.</p>
+<div class="listingblock"><div class="title">Resuming a listener</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">ranch:resume_listener</font></b>(<font color="#FF6600">tcp_echo</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<p>Whether a listener is currently running or suspended can be queried by calling <code>ranch:get_status/1</code> with the listener name as argument.</p>
<h2 id="_default_transport_options">Default transport options</h2>
-<p>By default the socket will be set to return <code>binary</code> data, with the options <code>{active, false}</code>, <code>{packet, raw}</code>, <code>{reuseaddr, true}</code> set. These values can&apos;t be overriden when starting the listener, but they can be overriden using <code>Transport:setopts/2</code> in the protocol.</p>
-<p>It will also set <code>{backlog, 1024}</code> and <code>{nodelay, true}</code>, which can be overriden at listener startup.</p>
+<p>By default the socket will be set to return <code>binary</code> data, with the options <code>{active, false}</code>, <code>{packet, raw}</code>, <code>{reuseaddr, true}</code> set. These values can&apos;t be overridden when starting the listener, but they can be overridden using <code>Transport:setopts/2</code> in the protocol.</p>
+<p>It will also set <code>{backlog, 1024}</code> and <code>{nodelay, true}</code>, which can be overridden at listener startup.</p>
<h2 id="_listening_on_a_random_port">Listening on a random port</h2>
<p>You do not have to specify a specific port to listen on. If you give the port number 0, or if you omit the port number entirely, Ranch will start listening on a random port.</p>
<p>You can retrieve this port number by calling <code>ranch:get_port/1</code>. The argument is the name of the listener you gave in <code>ranch:start_listener/5</code>.</p>
@@ -145,8 +162,8 @@ by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt>{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:start_listener</font></b>(<font color="#FF6600">tcp_echo</font>,
- <font color="#FF6600">ranch_tcp</font>, [{<font color="#FF6600">port</font>, <font color="#993399">0</font>}],
- <font color="#FF6600">echo_protocol</font>, []
+ <font color="#FF6600">ranch_tcp</font>, #{<font color="#0000FF">socket_opts</font> <font color="#990000">=&gt;</font> [{<font color="#FF6600">port</font>, <font color="#993399">0</font>}]},
+ <font color="#FF6600">echo_protocol</font>, []
)<font color="#990000">.</font>
<font color="#009900">Port</font> <font color="#990000">=</font> <b><font color="#000000">ranch:get_port</font></b>(<font color="#FF6600">tcp_echo</font>)<font color="#990000">.</font></tt></pre>
</div></div>
@@ -154,19 +171,61 @@ http://www.gnu.org/software/src-highlite -->
<p>Some systems limit access to ports below 1024 for security reasons. This can easily be identified by an <code>{error, eacces}</code> error when trying to open a listening socket on such a port.</p>
<p>The methods for listening on privileged ports vary between systems, please refer to your system&apos;s documentation for more information.</p>
<p>We recommend the use of port rewriting for systems with a single server, and load balancing for systems with multiple servers. Documenting these solutions is however out of the scope of this guide.</p>
+<h2 id="_listening_on_a_unix_domain_socket">Listening on a UNIX Domain socket</h2>
+<p>On UNIX systems, it is also possible to use Ranch to listen on a UNIX domain socket by specifying <code>{local, SocketFile}</code> for the <code>ip</code> socket option. In this case, the port must be set to 0 or omitted. The given file must not exist: Ranch must be able to create it.</p>
+<div class="listingblock"><div class="title">Starting a listener for TCP connections on a UNIX Domain socket</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt>{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:start_listener</font></b>(<font color="#FF6600">tcp_echo</font>,
+ <font color="#FF6600">ranch_tcp</font>, #{<font color="#0000FF">socket_opts</font> <font color="#990000">=&gt;</font> [
+ {<font color="#FF6600">ip</font>, {<font color="#FF6600">local</font>, <font color="#FF0000">"/tmp/ranch_echo.sock"</font>}},
+ {<font color="#FF6600">port</font>, <font color="#993399">0</font>}
+ ]}, <font color="#FF6600">echo_protocol</font>, []
+)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_performing_additional_setup_steps_on_a_listening_socket">Performing additional setup steps on a listening socket</h2>
+<p>If it is necessary to perform additional setup steps on the listening socket, it is possible to specify a function with the transport option <code>post_listen_callback</code>. This function will be called after the listening socket has been created but before accepting connections on it, with the socket as the single argument.</p>
+<p>The function must return either the atom <code>ok</code>, after which the listener will start accepting connections on the socket, or a tuple <code>{error, Reason}</code> which will cause the listener to fail starting with <code>Reason</code>.</p>
+<div class="listingblock"><div class="title">Setting permissions on a UNIX Domain socket file</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">PostListenCb</font> <font color="#990000">=</font> <b><font color="#0000FF">fun</font></b> (<font color="#009900">Sock</font>) <font color="#990000">-&gt;</font>
+ <b><font color="#0000FF">case</font></b> <b><font color="#000000">ranch_tcp:sockname</font></b>(<font color="#009900">Sock</font>) <b><font color="#0000FF">of</font></b>
+ {<font color="#FF6600">ok</font>, {<font color="#FF6600">local</font>, <font color="#009900">SockFile</font>}} <font color="#990000">-&gt;</font>
+ <b><font color="#000000">file:change_mode</font></b>(<font color="#009900">SockFile</font>, <font color="#993399">8#777</font>);
+ {<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">-&gt;</font>
+ <font color="#FF6600">ok</font>;
+ <font color="#009900">Error</font> <font color="#990000">=</font> {<font color="#FF6600">error</font>, <font color="#990000">_</font>} <font color="#990000">-&gt;</font>
+ <font color="#009900">Error</font>
+ <b><font color="#0000FF">end</font></b>
+<b><font color="#0000FF">end</font></b>,
+
+{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:start_listener</font></b>(<font color="#FF6600">tcp_echo</font>,
+ <font color="#FF6600">ranch_tcp</font>, #{
+ <font color="#0000FF">socket_opts</font> <font color="#990000">=&gt;</font> [
+ {<font color="#FF6600">ip</font>, {<font color="#FF6600">local</font>, <font color="#FF0000">"/tmp/ranch_echo.sock"</font>}},
+ {<font color="#FF6600">port</font>, <font color="#993399">0</font>}],
+ <font color="#0000FF">post_listen_callback</font> <font color="#990000">=&gt;</font> <font color="#009900">PostListenCb</font>},
+ <font color="#FF6600">echo_protocol</font>, []
+)<font color="#990000">.</font></tt></pre>
+</div></div>
<h2 id="_accepting_connections_on_an_existing_socket">Accepting connections on an existing socket</h2>
-<p>If you want to accept connections on an existing socket, you can use the <code>socket</code> transport option, which should just be the relevant data returned from the connect function for the transport or the underlying socket library (<code>gen_tcp:connect</code>, <code>ssl:connect</code>). The accept function will then be called on the passed in socket. You should connect the socket in <code>{active, false}</code> mode, as well.</p>
-<p>Note, however, that because of a bug in SSL, you cannot change ownership of an SSL listen socket prior to R16. Ranch will catch the error thrown, but the owner of the SSL socket will remain as whatever process created the socket. However, this will not affect accept behaviour unless the owner process dies, in which case the socket is closed. Therefore, to use this feature with SSL with an erlang release prior to R16, ensure that the SSL socket is opened in a persistant process.</p>
+<p>If you want to accept connections on an existing socket, you can write a custom <code>ranch_transport</code> implementation that fetches or otherwise acquires a listening socket in the <code>listen/1</code> callback and returns it in the form of <code>{ok, ListenSocket}</code>.</p>
+<p>The custom <code>listen/1</code> function must ensure that the listener process (usually the process calling it) is also made the controlling process of the socket it returns. Failing to do so will result in stop/start and suspend/resume not working properly for that listener.</p>
<h2 id="_limiting_the_number_of_concurrent_connections">Limiting the number of concurrent connections</h2>
-<p>The <code>max_connections</code> transport option allows you to limit the number of concurrent connections. It defaults to 1024. Its purpose is to prevent your system from being overloaded and ensuring all the connections are handled optimally.</p>
+<p>The <code>max_connections</code> transport option allows you to limit the number of concurrent connections per connection supervisor (see below). It defaults to 1024. Its purpose is to prevent your system from being overloaded and ensuring all the connections are handled optimally.</p>
<div class="listingblock"><div class="title">Customizing the maximum number of concurrent connections</div>
<div class="content"><!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt>{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:start_listener</font></b>(<font color="#FF6600">tcp_echo</font>,
- <font color="#FF6600">ranch_tcp</font>, [{<font color="#FF6600">port</font>, <font color="#993399">5555</font>}, {<font color="#FF6600">max_connections</font>, <font color="#993399">100</font>}],
- <font color="#FF6600">echo_protocol</font>, []
+ <font color="#FF6600">ranch_tcp</font>, #{<font color="#0000FF">socket_opts</font> <font color="#990000">=&gt;</font> [{<font color="#FF6600">port</font>, <font color="#993399">5555</font>}], <font color="#0000FF">max_connections</font> <font color="#990000">=&gt;</font> <font color="#993399">100</font>},
+ <font color="#FF6600">echo_protocol</font>, []
)<font color="#990000">.</font></tt></pre>
</div></div>
<p>You can disable this limit by setting its value to the atom <code>infinity</code>.</p>
@@ -176,8 +235,8 @@ by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt>{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:start_listener</font></b>(<font color="#FF6600">tcp_echo</font>,
- <font color="#FF6600">ranch_tcp</font>, [{<font color="#FF6600">port</font>, <font color="#993399">5555</font>}, {<font color="#FF6600">max_connections</font>, <font color="#FF6600">infinity</font>}],
- <font color="#FF6600">echo_protocol</font>, []
+ <font color="#FF6600">ranch_tcp</font>, #{<font color="#0000FF">socket_opts</font> <font color="#990000">=&gt;</font> [{<font color="#FF6600">port</font>, <font color="#993399">5555</font>}], <font color="#0000FF">max_connections</font> <font color="#990000">=&gt;</font> <font color="#FF6600">infinity</font>},
+ <font color="#FF6600">echo_protocol</font>, []
)<font color="#990000">.</font></tt></pre>
</div></div>
<p>The maximum number of connections is a soft limit. In practice, it can reach <code>max_connections</code> + the number of acceptors.</p>
@@ -191,7 +250,7 @@ http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000000">ranch:remove_connection</font></b>(<font color="#009900">Ref</font>)<font color="#990000">.</font></tt></pre>
</div></div>
-<p>As seen in the chapter covering protocols, this pid is received as the first argument of the protocol&apos;s <code>start_link/4</code> callback.</p>
+<p>As seen in the chapter covering protocols, this reference is received as the first argument of the protocol&apos;s <code>start_link/3</code> callback.</p>
<p>You can modify the <code>max_connections</code> value on a running listener by using the <code>ranch:set_max_connections/2</code> function, with the name of the listener as first argument and the new value as the second.</p>
<div class="listingblock"><div class="title">Upgrading the maximum number of connections</div>
<div class="content"><!-- Generator: GNU source-highlight 3.1.9
@@ -210,10 +269,51 @@ by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt>{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:start_listener</font></b>(<font color="#FF6600">tcp_echo</font>,
- <font color="#FF6600">ranch_tcp</font>, [{<font color="#FF6600">port</font>, <font color="#993399">5555</font>}, {<font color="#FF6600">num_acceptors</font>, <font color="#993399">42</font>}],
- <font color="#FF6600">echo_protocol</font>, []
+ <font color="#FF6600">ranch_tcp</font>, #{<font color="#0000FF">socket_opts</font> <font color="#990000">=&gt;</font> [{<font color="#FF6600">port</font>, <font color="#993399">5555</font>}], <font color="#0000FF">num_acceptors</font> <font color="#990000">=&gt;</font> <font color="#993399">42</font>},
+ <font color="#FF6600">echo_protocol</font>, []
)<font color="#990000">.</font></tt></pre>
</div></div>
+<h2 id="_customizing_the_number_of_connection_supervisors">Customizing the number of connection supervisors</h2>
+<p>By default Ranch will use one connection supervisor for each acceptor process (but not vice versa). Their task is to supervise the connection processes started by an acceptor. The number of connection supervisors can be tweaked.</p>
+<p>Note that the association between the individual acceptors and connection supervisors is fixed, meaning that acceptors will always use the same connection supervisor to start connection processes.</p>
+<div class="listingblock"><div class="title">Specifying a custom number of connection supervisors</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt>{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:start_listener</font></b>(<font color="#FF6600">tcp_echo</font>,
+ <font color="#FF6600">ranch_tcp</font>, #{<font color="#0000FF">socket_opts</font> <font color="#990000">=&gt;</font> [{<font color="#FF6600">port</font>, <font color="#993399">5555</font>}], <font color="#0000FF">num_conns_sups</font> <font color="#990000">=&gt;</font> <font color="#993399">42</font>},
+ <font color="#FF6600">echo_protocol</font>, []
+)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_setting_connection_count_alarms">Setting connection count alarms</h2>
+<p>The <code>alarms</code> transport option allows you to configure alarms which will be triggered when the number of connections tracked by one connection supervisor reaches or exceeds the defined treshold.</p>
+<p>The <code>alarms</code> transport option takes a map with alarm names as keys and alarm options as values.</p>
+<p>Any term is allowed as an alarm name.</p>
+<p>Alarm options include the alarm type and a treshold that, when reached, triggers the given callback. A cooldown prevents the alarm from being triggered too often.</p>
+<div class="listingblock"><div class="title">Log warnings when the number of connections exceeds 100</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">Alarms</font> <font color="#990000">=</font> #{
+ <font color="#0000FF">my_alarm</font> <font color="#990000">=&gt;</font> #{
+ <font color="#0000FF">type</font> <font color="#990000">=&gt;</font> <font color="#FF6600">num_connections</font>,
+ <font color="#0000FF">treshold</font> <font color="#990000">=&gt;</font> <font color="#993399">100</font>,
+ <font color="#0000FF">callback</font> <font color="#990000">=&gt;</font> <b><font color="#0000FF">fun</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Name</font>, <font color="#009900">ConnSup</font>, <font color="#009900">ConnPids</font>]) <font color="#990000">-&gt;</font>
+ <b><font color="#000000">logger:warning</font></b>(<font color="#FF0000">"Warning (~s): "</font>
+ <font color="#FF0000">"Supervisor ~s of listener ~s "</font>
+ <font color="#FF0000">"has ~b connections"</font>,
+ [<font color="#009900">Name</font>, <font color="#009900">Ref</font>, <font color="#009900">ConnSup</font>, <b><font color="#000080">length</font></b>(<font color="#009900">ConnPids</font>)])
+ <b><font color="#0000FF">end</font></b>
+ }
+},
+{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:start_listener</font></b>(<font color="#FF6600">tcp_echo</font>,
+ <font color="#FF6600">ranch_tcp</font>, #{<font color="#0000FF">alarms</font> <font color="#990000">=&gt;</font> <font color="#009900">Alarms</font>, <font color="#0000FF">socket_opts</font> <font color="#990000">=&gt;</font> [{<font color="#FF6600">port</font>, <font color="#993399">5555</font>}]},
+ <font color="#FF6600">echo_protocol</font>, []
+)<font color="#990000">.</font></tt></pre>
+</div></div>
+<p>In the example code, an alarm named <code>my_alarm</code> is defined, which will call the given function when the number of connections tracked by the connection supervisor reaches or exceeds 100. When the number of connections is still (or again) above 100 after the default cooldown period of 5 seconds, the alarm will trigger again.</p>
<h2 id="_when_running_out_of_file_descriptors">When running out of file descriptors</h2>
<p>Operating systems have limits on the number of sockets which can be opened by applications. When this maximum is reached the listener can no longer accept new connections. The accept rate of the listener will be automatically reduced, and a warning message will be logged.</p>
<div class="listingblock"><div class="content"><pre>=ERROR REPORT==== 13-Jan-2016::12:24:38 ===
@@ -243,6 +343,23 @@ http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><font color="#009900">Opts</font> <font color="#990000">=</font> <b><font color="#000000">ranch:get_protocol_options</font></b>(<font color="#FF6600">tcp_echo</font>)<font color="#990000">.</font></tt></pre>
</div></div>
+<h2 id="_changing_transport_options">Changing transport options</h2>
+<p>Ranch allows you to change the transport options of a listener with the <code>ranch:set_transport_options/2</code> function, for example to change the number of acceptors or to make it listen on a different port.</p>
+<div class="listingblock"><div class="title">Changing the transport options</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">ranch:set_transport_options</font></b>(<font color="#FF6600">tcp_echo</font>, <font color="#009900">NewOpts</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<p>You can retrieve the current transport options by calling <code>ranch:get_transport_options/1</code>.</p>
+<div class="listingblock"><div class="title">Retrieving the current transport options</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">Opts</font> <font color="#990000">=</font> <b><font color="#000000">ranch:get_transport_options</font></b>(<font color="#FF6600">tcp_echo</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
<h2 id="_obtaining_information_about_listeners">Obtaining information about listeners</h2>
<p>Ranch provides two functions for retrieving information about the listeners, for reporting and diagnostic purposes.</p>
<p>The <code>ranch:info/0</code> function will return detailed information about all listeners.</p>
@@ -281,13 +398,13 @@ http://www.gnu.org/software/src-highlite -->
<nav style="margin:1em 0">
- <a style="float:left" href="https://ninenines.eu/docs/en/ranch/1.5/guide/introduction/">
+ <a style="float:left" href="https://ninenines.eu/docs/en/ranch/2.1/guide/introduction/">
Introduction
</a>
- <a style="float:right" href="https://ninenines.eu/docs/en/ranch/1.5/guide/transports/">
+ <a style="float:right" href="https://ninenines.eu/docs/en/ranch/2.1/guide/transports/">
Transports
</a>
@@ -303,17 +420,17 @@ http://www.gnu.org/software/src-highlite -->
<h3>
Ranch
- 1.5
+ 2.1
User Guide
</h3>
<ul>
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
</ul>
@@ -325,6 +442,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -333,8 +452,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.1/guide/migrating_from_1.5.asciidoc b/docs/en/ranch/2.1/guide/migrating_from_1.5.asciidoc
new file mode 100644
index 00000000..a454f932
--- /dev/null
+++ b/docs/en/ranch/2.1/guide/migrating_from_1.5.asciidoc
@@ -0,0 +1,76 @@
+[appendix]
+== Migrating from Ranch 1.5 to 1.6
+
+Ranch 1.6 added the ability to suspend and resume listeners.
+It also deprecates a number of features and add interfaces
+that will be used in Ranch 2.0.
+
+Ranch 1.6 is compatible with Erlang/OTP 18.0 onward. Support
+for older releases has been removed.
+
+=== Features added
+
+* Listeners can now be suspended/resumed without stopping existing
+ connection processes. This effectively closes the listening socket
+ and stops the acceptor processes.
+
+* Transport options can now be updated for suspended listeners.
+
+* The `Socket` argument given when the protocol starts has been
+ deprecated. In Ranch 2.0 the socket will be obtainable only
+ by calling `ranch:handshake/1,2`.
+
+* Ranch-specific transport options and socket options are now
+ better separated. When passing Ranch-specific transport options,
+ Ranch now expects to receive a map, in which case socket
+ options are passed in the `socket_opts` value. When there
+ are only socket options they can be passed to Ranch directly
+ as a convenience.
+
+* Any future transport option will only be added to the map
+ type. This includes transport options added in this release.
+
+* The transport option `ack_timeout` was renamed to `handshake_timeout`
+ in the map type.
+
+* The `cacerts` socket option is now silenced in error logs
+ just like the `certs` and `key` options.
+
+* The manual has been heavily updated and now features one
+ manual page per function and module, complete with a per-function
+ changelog, examples and more.
+
+=== Experimental features added
+
+* It is now possible to configure the restart intensity for
+ `ranch_sup` using the OTP application environment. This
+ feature will remain undocumented unless there is popular
+ demand for it.
+
+* Add the transport option `logger` that allows configuring
+ which logger module will be used. The logger module must
+ follow the interface of the new `logger` module in Erlang/OTP 21,
+ or be set to `error_logger` to keep the old behavior.
+
+=== Changed behaviors
+
+* Transport modules must now implement `Transport:handshake/2,3`
+ which deprecates and will replace `Transport:accept_ack/1` in
+ Ranch 2.0. It returns a new socket and can therefore be used
+ for implementing TLS upgrade mechanisms.
+
+=== New functions
+
+* The functions `ranch:suspend_listener/1` and `ranch:resume_listener/1`
+ were added. In addition the function `ranch:get_state/1` can be used
+ to obtain the running state of a listener.
+
+* A function `ranch:wait_for_connections/3` was added.
+
+* A function `ranch:handshake/1,2` was added to replace the
+ function `ranch:accept_ack/1`.
+
+=== Bugs fixed
+
+* The specs for the function `Transport:sendfile/2,4,5` have been
+ corrected. The type used for the filename was too restricting.
diff --git a/docs/en/ranch/2.1/guide/migrating_from_1.5/index.html b/docs/en/ranch/2.1/guide/migrating_from_1.5/index.html
new file mode 100644
index 00000000..ae89f9ed
--- /dev/null
+++ b/docs/en/ranch/2.1/guide/migrating_from_1.5/index.html
@@ -0,0 +1,221 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: Migrating from Ranch 1.5 to 1.6</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>Migrating from Ranch 1.5 to 1.6</span></h1>
+
+<p>Ranch 1.6 added the ability to suspend and resume listeners. It also deprecates a number of features and add interfaces that will be used in Ranch 2.0.</p>
+<p>Ranch 1.6 is compatible with Erlang/OTP 18.0 onward. Support for older releases has been removed.</p>
+<h2 id="_features_added">Features added</h2>
+<ul><li>Listeners can now be suspended/resumed without stopping existing connection processes. This effectively closes the listening socket and stops the acceptor processes.
+</li>
+<li>Transport options can now be updated for suspended listeners.
+</li>
+<li>The <code>Socket</code> argument given when the protocol starts has been deprecated. In Ranch 2.0 the socket will be obtainable only by calling <code>ranch:handshake/1,2</code>.
+</li>
+<li>Ranch-specific transport options and socket options are now better separated. When passing Ranch-specific transport options, Ranch now expects to receive a map, in which case socket options are passed in the <code>socket_opts</code> value. When there are only socket options they can be passed to Ranch directly as a convenience.
+</li>
+<li>Any future transport option will only be added to the map type. This includes transport options added in this release.
+</li>
+<li>The transport option <code>ack_timeout</code> was renamed to <code>handshake_timeout</code> in the map type.
+</li>
+<li>The <code>cacerts</code> socket option is now silenced in error logs just like the <code>certs</code> and <code>key</code> options.
+</li>
+<li>The manual has been heavily updated and now features one manual page per function and module, complete with a per-function changelog, examples and more.
+</li>
+</ul>
+<h2 id="_experimental_features_added">Experimental features added</h2>
+<ul><li>It is now possible to configure the restart intensity for <code>ranch_sup</code> using the OTP application environment. This feature will remain undocumented unless there is popular demand for it.
+</li>
+<li>Add the transport option <code>logger</code> that allows configuring which logger module will be used. The logger module must follow the interface of the new <code>logger</code> module in Erlang/OTP 21, or be set to <code>error_logger</code> to keep the old behavior.
+</li>
+</ul>
+<h2 id="_changed_behaviors">Changed behaviors</h2>
+<ul><li>Transport modules must now implement <code>Transport:handshake/2,3</code> which deprecates and will replace <code>Transport:accept_ack/1</code> in Ranch 2.0. It returns a new socket and can therefore be used for implementing TLS upgrade mechanisms.
+</li>
+</ul>
+<h2 id="_new_functions">New functions</h2>
+<ul><li>The functions <code>ranch:suspend_listener/1</code> and <code>ranch:resume_listener/1</code> were added. In addition the function <code>ranch:get_state/1</code> can be used to obtain the running state of a listener.
+</li>
+<li>A function <code>ranch:wait_for_connections/3</code> was added.
+</li>
+<li>A function <code>ranch:handshake/1,2</code> was added to replace the function <code>ranch:accept_ack/1</code>.
+</li>
+</ul>
+<h2 id="_bugs_fixed">Bugs fixed</h2>
+<ul><li>The specs for the function <code>Transport:sendfile/2,4,5</code> have been corrected. The type used for the filename was too restricting.
+</li>
+</ul>
+
+
+
+
+
+
+
+
+
+
+
+ <nav style="margin:1em 0">
+
+ <a style="float:left" href="https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.6/">
+ Migrating from Ranch 1.6 to 1.7
+ </a>
+
+
+
+ <a style="float:right" href="https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.x/">
+ Migrating from Ranch 1.x
+ </a>
+
+ </nav>
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+
+ User Guide
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/guide">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/guide/migrating_from_1.6.asciidoc b/docs/en/ranch/2.1/guide/migrating_from_1.6.asciidoc
new file mode 100644
index 00000000..f0c32e88
--- /dev/null
+++ b/docs/en/ranch/2.1/guide/migrating_from_1.6.asciidoc
@@ -0,0 +1,46 @@
+[appendix]
+== Migrating from Ranch 1.6 to 1.7
+
+Ranch 1.7 adds built-in support for the PROXY protocol.
+
+The PROXY protocol is a simple and efficient way for proxies
+to transmit information about the client.
+
+While a third-party library already existed, it was not
+entirely compatible with the Ranch interface, in particular
+when socket active mode was involved. This new implementation
+fixes that and supports the full protocol with as little
+overhead as possible compared to normal operations: just one
+extra function call.
+
+Ranch 1.7 is compatible with Erlang/OTP 19.0 onward. Support
+for Erlang/OTP 18 has been removed.
+
+=== Features added
+
+* Full support for the PROXY protocol was added.
+
+=== New functions
+
+* Add the function `ranch:recv_proxy_header/2` to receive
+ the PROXY protocol header and parse it. It must be called
+ before `ranch:handshake/1,2`.
+
+* Add the functions `ranch_proxy_header:parse/1` and
+ `ranch_proxy_header:header/1,2` to parse and build a
+ PROXY protocol header, respectively.
+
+=== Bugs fixed
+
+* Fix a race condition when the listener is restarted
+ after `ranch_listener_sup` crashes. This resulted in
+ the original options being used even if the options
+ were updated at runtime.
+
+* Make the acceptors exit instead of crash when the
+ listening socket has been closed to prevent
+ unnecessary logs.
+
+* Fix an issue where listener information would not get
+ cleaned up when an embedded listener was stopped. This
+ was fixed in Ranch 1.6.2.
diff --git a/docs/en/ranch/2.1/guide/migrating_from_1.6/index.html b/docs/en/ranch/2.1/guide/migrating_from_1.6/index.html
new file mode 100644
index 00000000..13ff2201
--- /dev/null
+++ b/docs/en/ranch/2.1/guide/migrating_from_1.6/index.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: Migrating from Ranch 1.6 to 1.7</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>Migrating from Ranch 1.6 to 1.7</span></h1>
+
+<p>Ranch 1.7 adds built-in support for the PROXY protocol.</p>
+<p>The PROXY protocol is a simple and efficient way for proxies to transmit information about the client.</p>
+<p>While a third-party library already existed, it was not entirely compatible with the Ranch interface, in particular when socket active mode was involved. This new implementation fixes that and supports the full protocol with as little overhead as possible compared to normal operations: just one extra function call.</p>
+<p>Ranch 1.7 is compatible with Erlang/OTP 19.0 onward. Support for Erlang/OTP 18 has been removed.</p>
+<h2 id="_features_added">Features added</h2>
+<ul><li>Full support for the PROXY protocol was added.
+</li>
+</ul>
+<h2 id="_new_functions">New functions</h2>
+<ul><li>Add the function <code>ranch:recv_proxy_header/2</code> to receive the PROXY protocol header and parse it. It must be called before <code>ranch:handshake/1,2</code>.
+</li>
+<li>Add the functions <code>ranch_proxy_header:parse/1</code> and <code>ranch_proxy_header:header/1,2</code> to parse and build a PROXY protocol header, respectively.
+</li>
+</ul>
+<h2 id="_bugs_fixed">Bugs fixed</h2>
+<ul><li>Fix a race condition when the listener is restarted after <code>ranch_listener_sup</code> crashes. This resulted in the original options being used even if the options were updated at runtime.
+</li>
+<li>Make the acceptors exit instead of crash when the listening socket has been closed to prevent unnecessary logs.
+</li>
+<li>Fix an issue where listener information would not get cleaned up when an embedded listener was stopped. This was fixed in Ranch 1.6.2.
+</li>
+</ul>
+
+
+
+
+
+
+
+
+
+
+
+ <nav style="margin:1em 0">
+
+ <a style="float:left" href="https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.7/">
+ Migrating from Ranch 1.7&#43; to Ranch 2.0
+ </a>
+
+
+
+ <a style="float:right" href="https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.5/">
+ Migrating from Ranch 1.5 to 1.6
+ </a>
+
+ </nav>
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+
+ User Guide
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/guide">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/guide/migrating_from_1.7.asciidoc b/docs/en/ranch/2.1/guide/migrating_from_1.7.asciidoc
new file mode 100644
index 00000000..e9b1c96e
--- /dev/null
+++ b/docs/en/ranch/2.1/guide/migrating_from_1.7.asciidoc
@@ -0,0 +1,163 @@
+[appendix]
+== Migrating from Ranch 1.7+ to Ranch 2.0
+
+Ranch 2.0 adds support for multiple connection supervisors.
+
+Ranch 1.x had a bottleneck because it used only a single
+connection supervisor. This was more evident when many
+connections were dropped at once as the supervisor couldn't
+keep up and failed to accept new connections while cleaning
+up the old ones. Ranch 2.0 behaves much better in this scenario
+by default. Multiple connection supervisors also helps with
+concurrently accepting new connections.
+
+Ranch 2.0 also adds experimental support for opening more
+than one listening socket on a single port.
+
+Starting with Ranch 2.0 we are also providing a
+https://github.com/juhlig/prometheus_ranch[Prometheus collector]
+as a separate project as well as a
+https://github.com/juhlig/prometheus_ranch/blob/master/dashboards/ranch-dashboard.json[Grafana dashboard].
+
+Ranch 2.0 is compatible with Erlang/OTP 21.0 onward. Support
+for Erlang/OTP 19 and 20 has been removed.
+
+=== Features added
+
+* Ranch now comes with a `ranch.appup` file necessary for
+ performing release upgrades. A test suite has been added
+ to confirm release upgrades work from one tag to the next.
+ Numerous fixes were made that will also improve error recovery.
+ Release upgrades will only be supported from Ranch 2.0
+ onward.
+
+* The `num_conns_sups` option has been added. It allows
+ configuring the number of connection supervisors. It
+ now defaults to `num_accceptors`. The old behavior can
+ be obtained by setting this value to 1.
+
+* The `logger` option is no longer experimental. It now
+ defaults to `logger` instead of `error_logger`.
+
+* UNIX domain sockets are now supported.
+
+* The active N socket option is now supported. It requires
+ Erlang/OTP 21.3 or above for TLS, however.
+
+* Embedded listeners are now failing in a predictable
+ manner when `ranch_server` goes down. It is no longer
+ necessary to embed `ranch_sup` and the recommendation
+ is now to just start Ranch normally when using embedded
+ listeners.
+
+* Two steps handshake is now supported. This allows
+ obtaining TLS extensions and updating options before
+ resuming the handshake. The handshake can also be
+ canceled.
+
+=== Experimental features added
+
+* The experimental `num_listen_sockets` option has been
+ added. It allows opening more than one listening socket
+ per listener. It can only be used alongside the Linux
+ `SO_REUSEPORT` socket option or equivalent. It allows
+ working around a bottleneck in the kernel and maximizes
+ resource usage, leading to increased rates for accepting
+ new connections.
+
+=== Features removed
+
+* The `socket` option was removed. A more viable solution
+ is to define a custom transport module that returns a fresh
+ socket when `Transport:listen/1` is called.
+
+=== Changed behaviors
+
+* The callback function `Transport:listen/1` and its
+ implementations in `ranch_tcp` and `ranch_ssl` have changed
+ to accept a map of transport options instead of only
+ socket options.
+
+* The callback function `Transport:messages/0` return value
+ now includes the tag used for passive messages.
+
+* The `Socket` argument was removed from `Protocol:start_link/3`.
+ The socket must now be obtained by calling `ranch:handshake/1,2`.
+
+=== Added functions
+
+* The functions `ranch:handshake_continue/1,2` and
+ `ranch:handshake_cancel/1` can be used to perform
+ a two steps handshake. These functions may not be
+ supported by all transports.
+
+=== Changed functions
+
+* The `NumAcceptors` argument was removed from `ranch:start_listener/5`
+ and `ranch:child_spec/5` and moved to the transport options.
+
+* Ranch options can no longer be passed along with socket options
+ as a proplist. The only forms allowed are now the `ranch:opts()`
+ map or only socket options as-is. Individual transport options
+ are now validated as well. The `ranch:opts()` map must
+ be used when socket options also use a map. This applies to the
+ `ranch:start_listener/5`, `ranch:child_spec/5` and
+ `ranch:set_transport_options/2` functions.
+
+* The function `ranch:info/1,2` now returns a map containing
+ each listener's information rather than a list of key/values.
+ The key `num_acceptors` was removed as it can be found in the
+ transport options.
+
+* The function `ranch:set_transport_options/2` no longer requires
+ the listener to be suspended. Which options apply immediately,
+ on suspend/resume or on restart has been documented. Some work
+ has also been done to make these option changes more predictable.
+
+=== Removed functions
+
+* The function `ranch:accept_ack/1` has been removed in favor
+ of `ranch:handshake/1,2`.
+
+=== Bugs fixed
+
+* Calling `ranch:remove_connection/1` will now resume a sleeping
+ acceptor process when applicable.
+
+* Repeatedly calling `ranch:remove_connection/1` from a connection
+ process would crash the respective connection supervisor. This has
+ now been fixed.
+
+* When a connection process was failing to start, the socket was
+ not closed and this lead to leaking sockets. This is now corrected.
+
+=== Other changes
+
+* Connection draining has now been documented in the guide
+ following user feedback and discussions.
+
+* Ranch is now tested against https://concuerror.com/[Concuerror],
+ a model checking tool for debugging, testing and verifying
+ concurrent Erlang programs. Two tests have been added in this
+ release and more will follow in the future.
+
+* Ranch is now tested against `stampede`, a chaos monkey style
+ testing tool. Currently includes three scenarios: normal
+ TCP and TLS listeners and embedded TCP listener. This new
+ test suite helped uncover a misplaced `monitor/2` call
+ added during the development of Ranch 2.0 (we were using a
+ similar tool, `havoc`, at the time of finding that issue).
+
+* The supervisor for acceptors and the parent supervisor for
+ connection supervisors now have an adaptive restart
+ intensity limit set to `1 + ceil(math:log2(NumChildren))`
+ to allow room for errors when they have many children.
+
+* Ranch now uses stricter compiler options. Missing function
+ specs were added to internal modules.
+
+* Ranch now calls `ssl:handshake/1,2,3` instead of
+ `ssl:ssl_accept/1,2`.
+
+* The `ranch_ssl:ssl_opt()` type has been updated to conform
+ with Erlang/OTP 23.0.
diff --git a/docs/en/ranch/2.1/guide/migrating_from_1.7/index.html b/docs/en/ranch/2.1/guide/migrating_from_1.7/index.html
new file mode 100644
index 00000000..ee99259a
--- /dev/null
+++ b/docs/en/ranch/2.1/guide/migrating_from_1.7/index.html
@@ -0,0 +1,258 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: Migrating from Ranch 1.7&#43; to Ranch 2.0</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>Migrating from Ranch 1.7&#43; to Ranch 2.0</span></h1>
+
+<p>Ranch 2.0 adds support for multiple connection supervisors.</p>
+<p>Ranch 1.x had a bottleneck because it used only a single connection supervisor. This was more evident when many connections were dropped at once as the supervisor couldn&apos;t keep up and failed to accept new connections while cleaning up the old ones. Ranch 2.0 behaves much better in this scenario by default. Multiple connection supervisors also helps with concurrently accepting new connections.</p>
+<p>Ranch 2.0 also adds experimental support for opening more than one listening socket on a single port.</p>
+<p>Starting with Ranch 2.0 we are also providing a <a href="https://github.com/juhlig/prometheus_ranch">Prometheus collector</a> as a separate project as well as a <a href="https://github.com/juhlig/prometheus_ranch/blob/master/dashboards/ranch-dashboard.json">Grafana dashboard</a>.</p>
+<p>Ranch 2.0 is compatible with Erlang/OTP 21.0 onward. Support for Erlang/OTP 19 and 20 has been removed.</p>
+<h2 id="_features_added">Features added</h2>
+<ul><li>Ranch now comes with a <code>ranch.appup</code> file necessary for performing release upgrades. A test suite has been added to confirm release upgrades work from one tag to the next. Numerous fixes were made that will also improve error recovery. Release upgrades will only be supported from Ranch 2.0 onward.
+</li>
+<li>The <code>num_conns_sups</code> option has been added. It allows configuring the number of connection supervisors. It now defaults to <code>num_accceptors</code>. The old behavior can be obtained by setting this value to 1.
+</li>
+<li>The <code>logger</code> option is no longer experimental. It now defaults to <code>logger</code> instead of <code>error_logger</code>.
+</li>
+<li>UNIX domain sockets are now supported.
+</li>
+<li>The active N socket option is now supported. It requires Erlang/OTP 21.3 or above for TLS, however.
+</li>
+<li>Embedded listeners are now failing in a predictable manner when <code>ranch_server</code> goes down. It is no longer necessary to embed <code>ranch_sup</code> and the recommendation is now to just start Ranch normally when using embedded listeners.
+</li>
+<li>Two steps handshake is now supported. This allows obtaining TLS extensions and updating options before resuming the handshake. The handshake can also be canceled.
+</li>
+</ul>
+<h2 id="_experimental_features_added">Experimental features added</h2>
+<ul><li>The experimental <code>num_listen_sockets</code> option has been added. It allows opening more than one listening socket per listener. It can only be used alongside the Linux <code>SO_REUSEPORT</code> socket option or equivalent. It allows working around a bottleneck in the kernel and maximizes resource usage, leading to increased rates for accepting new connections.
+</li>
+</ul>
+<h2 id="_features_removed">Features removed</h2>
+<ul><li>The <code>socket</code> option was removed. A more viable solution is to define a custom transport module that returns a fresh socket when <code>Transport:listen/1</code> is called.
+</li>
+</ul>
+<h2 id="_changed_behaviors">Changed behaviors</h2>
+<ul><li>The callback function <code>Transport:listen/1</code> and its implementations in <code>ranch_tcp</code> and <code>ranch_ssl</code> have changed to accept a map of transport options instead of only socket options.
+</li>
+<li>The callback function <code>Transport:messages/0</code> return value now includes the tag used for passive messages.
+</li>
+<li>The <code>Socket</code> argument was removed from <code>Protocol:start_link/3</code>. The socket must now be obtained by calling <code>ranch:handshake/1,2</code>.
+</li>
+</ul>
+<h2 id="_added_functions">Added functions</h2>
+<ul><li>The functions <code>ranch:handshake_continue/1,2</code> and <code>ranch:handshake_cancel/1</code> can be used to perform a two steps handshake. These functions may not be supported by all transports.
+</li>
+</ul>
+<h2 id="_changed_functions">Changed functions</h2>
+<ul><li>The <code>NumAcceptors</code> argument was removed from <code>ranch:start_listener/5</code> and <code>ranch:child_spec/5</code> and moved to the transport options.
+</li>
+<li>Ranch options can no longer be passed along with socket options as a proplist. The only forms allowed are now the <code>ranch:opts()</code> map or only socket options as-is. Individual transport options are now validated as well. The <code>ranch:opts()</code> map must be used when socket options also use a map. This applies to the <code>ranch:start_listener/5</code>, <code>ranch:child_spec/5</code> and <code>ranch:set_transport_options/2</code> functions.
+</li>
+<li>The function <code>ranch:info/1,2</code> now returns a map containing each listener&apos;s information rather than a list of key/values. The key <code>num_acceptors</code> was removed as it can be found in the transport options.
+</li>
+<li>The function <code>ranch:set_transport_options/2</code> no longer requires the listener to be suspended. Which options apply immediately, on suspend/resume or on restart has been documented. Some work has also been done to make these option changes more predictable.
+</li>
+</ul>
+<h2 id="_removed_functions">Removed functions</h2>
+<ul><li>The function <code>ranch:accept_ack/1</code> has been removed in favor of <code>ranch:handshake/1,2</code>.
+</li>
+</ul>
+<h2 id="_bugs_fixed">Bugs fixed</h2>
+<ul><li>Calling <code>ranch:remove_connection/1</code> will now resume a sleeping acceptor process when applicable.
+</li>
+<li>Repeatedly calling <code>ranch:remove_connection/1</code> from a connection process would crash the respective connection supervisor. This has now been fixed.
+</li>
+<li>When a connection process was failing to start, the socket was not closed and this lead to leaking sockets. This is now corrected.
+</li>
+</ul>
+<h2 id="_other_changes">Other changes</h2>
+<ul><li>Connection draining has now been documented in the guide following user feedback and discussions.
+</li>
+<li>Ranch is now tested against <a href="https://concuerror.com/">Concuerror</a>, a model checking tool for debugging, testing and verifying concurrent Erlang programs. Two tests have been added in this release and more will follow in the future.
+</li>
+<li>Ranch is now tested against <code>stampede</code>, a chaos monkey style testing tool. Currently includes three scenarios: normal TCP and TLS listeners and embedded TCP listener. This new test suite helped uncover a misplaced <code>monitor/2</code> call added during the development of Ranch 2.0 (we were using a similar tool, <code>havoc</code>, at the time of finding that issue).
+</li>
+<li>The supervisor for acceptors and the parent supervisor for connection supervisors now have an adaptive restart intensity limit set to <code>1 + ceil(math:log2(NumChildren))</code> to allow room for errors when they have many children.
+</li>
+<li>Ranch now uses stricter compiler options. Missing function specs were added to internal modules.
+</li>
+<li>Ranch now calls <code>ssl:handshake/1,2,3</code> instead of <code>ssl:ssl_accept/1,2</code>.
+</li>
+<li>The <code>ranch_ssl:ssl_opt()</code> type has been updated to conform with Erlang/OTP 23.0.
+</li>
+</ul>
+
+
+
+
+
+
+
+
+
+
+
+ <nav style="margin:1em 0">
+
+ <a style="float:left" href="https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_2.0/">
+ Migrating from Ranch 2.0 to Ranch 2.1
+ </a>
+
+
+
+ <a style="float:right" href="https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.6/">
+ Migrating from Ranch 1.6 to 1.7
+ </a>
+
+ </nav>
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+
+ User Guide
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/guide">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/guide/migrating_from_1.x.asciidoc b/docs/en/ranch/2.1/guide/migrating_from_1.x.asciidoc
new file mode 100644
index 00000000..44babf17
--- /dev/null
+++ b/docs/en/ranch/2.1/guide/migrating_from_1.x.asciidoc
@@ -0,0 +1,70 @@
+[appendix]
+== Migrating from Ranch 1.x
+
+The changelog for Ranch releases before 1.6 can be found
+in this section.
+
+=== 1.5.0
+
+* Add transport functions getopts/2, getstat/1 and getstat/2
+* Fix ranch:info/0 and ranch:procs/2 in embedded mode
+* Prevent ranch_conns_sup from stopping on unexpected messages
+
+=== 1.4.0
+
+* Add new transport option num_acceptor
+* Deprecate ranch:start_listener/6 in favor of start_listener/5
+* Deprecate ranch:child_spec/6 in favor of child_spec/5
+
+=== 1.3.0
+
+The version numbers 1.3.1 and 1.3.2 were later made to fix
+small mistakes made during the 1.3.0 release process. They
+do not include code changes.
+
+* Tested with OTP R16B+ on Linux, FreeBSD, OSX and Windows
+* Add ssl to the list of dependencies
+* Add ranch:info/0 and ranch:procs/2 to retrieve Ranch state information
+* Allow configuring a listener with only SNI, without a default certificate
+* Blacklist transport options instead of whitelist
+** Unknown options are now allowed, but will result in a Dialyzer warning
+* Add many transport options typespecs and documentation
+* Don't silently drop the accept rate when running out of fds
+* Prevent a race condition when stopping listeners
+* Improve reporting for common errors, for example eaddrinuse
+* Fix double removal of connections bug
+** The number of active connections should now be exact
+* Fix stuck acceptor bug when controlling_socket returned errors
+* Numerous documentation and examples improvements
+
+=== 1.2.1
+
+* Fix bug preventing node shutdown when SSL is used with OTP 17.1+
+* Tune restart intensity in all supervisors
+
+=== 1.2.0
+
+* Allow the supervised process and the process owning the socket to be different
+* Add many transport options (please refer to the documentation)
+* Add function ranch:get_addr/1 to retrieve both IP and port of listener
+* Don't pass Ranch-specific options down to transports
+** Should make Dialyzer happy in user projects
+** New types ranch:opt(), ranch_tcp:opt(), ranch_ssl:ssl_opt() and ranch_ssl:opt()
+* Fix crash when filtering unknown options out
+* Print a warning for each option filtered out
+* Handle Transport:controlling_socket/2 errors and close the socket
+* Handle Protocol:start_link/4 crashes to avoid killing all active connections
+* Use Asciidoc for documentation
+* Test Ranch across 14 Erlang versions on CircleCI
+* Improve and document test suites with recent ct_helper improvements
+* Fix a number of intermittent test issues
+
+=== 1.1.0
+
+* Add Transport:secure/0
+* Add SSL partial_chain option
+* Stop reporting errors on {error, closed} in accept_ack
+
+=== 1.0.0
+
+* Initial release
diff --git a/docs/en/ranch/2.1/guide/migrating_from_1.x/index.html b/docs/en/ranch/2.1/guide/migrating_from_1.x/index.html
new file mode 100644
index 00000000..fd3bcab9
--- /dev/null
+++ b/docs/en/ranch/2.1/guide/migrating_from_1.x/index.html
@@ -0,0 +1,274 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: Migrating from Ranch 1.x</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>Migrating from Ranch 1.x</span></h1>
+
+<p>The changelog for Ranch releases before 1.6 can be found in this section.</p>
+<h2 id="_1_5_0">1.5.0</h2>
+<ul><li>Add transport functions getopts/2, getstat/1 and getstat/2
+</li>
+<li>Fix ranch:info/0 and ranch:procs/2 in embedded mode
+</li>
+<li>Prevent ranch_conns_sup from stopping on unexpected messages
+</li>
+</ul>
+<h2 id="_1_4_0">1.4.0</h2>
+<ul><li>Add new transport option num_acceptor
+</li>
+<li>Deprecate ranch:start_listener/6 in favor of start_listener/5
+</li>
+<li>Deprecate ranch:child_spec/6 in favor of child_spec/5
+</li>
+</ul>
+<h2 id="_1_3_0">1.3.0</h2>
+<p>The version numbers 1.3.1 and 1.3.2 were later made to fix small mistakes made during the 1.3.0 release process. They do not include code changes.</p>
+<ul><li>Tested with OTP R16B+ on Linux, FreeBSD, OSX and Windows
+</li>
+<li>Add ssl to the list of dependencies
+</li>
+<li>Add ranch:info/0 and ranch:procs/2 to retrieve Ranch state information
+</li>
+<li>Allow configuring a listener with only SNI, without a default certificate
+</li>
+<li>Blacklist transport options instead of whitelist
+<ul><li>Unknown options are now allowed, but will result in a Dialyzer warning
+</li>
+</ul>
+</li>
+<li>Add many transport options typespecs and documentation
+</li>
+<li>Don&apos;t silently drop the accept rate when running out of fds
+</li>
+<li>Prevent a race condition when stopping listeners
+</li>
+<li>Improve reporting for common errors, for example eaddrinuse
+</li>
+<li>Fix double removal of connections bug
+<ul><li>The number of active connections should now be exact
+</li>
+</ul>
+</li>
+<li>Fix stuck acceptor bug when controlling_socket returned errors
+</li>
+<li>Numerous documentation and examples improvements
+</li>
+</ul>
+<h2 id="_1_2_1">1.2.1</h2>
+<ul><li>Fix bug preventing node shutdown when SSL is used with OTP 17.1+
+</li>
+<li>Tune restart intensity in all supervisors
+</li>
+</ul>
+<h2 id="_1_2_0">1.2.0</h2>
+<ul><li>Allow the supervised process and the process owning the socket to be different
+</li>
+<li>Add many transport options (please refer to the documentation)
+</li>
+<li>Add function ranch:get_addr/1 to retrieve both IP and port of listener
+</li>
+<li>Don&apos;t pass Ranch-specific options down to transports
+<ul><li>Should make Dialyzer happy in user projects
+</li>
+<li>New types ranch:opt(), ranch_tcp:opt(), ranch_ssl:ssl_opt() and ranch_ssl:opt()
+</li>
+</ul>
+</li>
+<li>Fix crash when filtering unknown options out
+</li>
+<li>Print a warning for each option filtered out
+</li>
+<li>Handle Transport:controlling_socket/2 errors and close the socket
+</li>
+<li>Handle Protocol:start_link/4 crashes to avoid killing all active connections
+</li>
+<li>Use Asciidoc for documentation
+</li>
+<li>Test Ranch across 14 Erlang versions on CircleCI
+</li>
+<li>Improve and document test suites with recent ct_helper improvements
+</li>
+<li>Fix a number of intermittent test issues
+</li>
+</ul>
+<h2 id="_1_1_0">1.1.0</h2>
+<ul><li>Add Transport:secure/0
+</li>
+<li>Add SSL partial_chain option
+</li>
+<li>Stop reporting errors on {error, closed} in accept_ack
+</li>
+</ul>
+<h2 id="_1_0_0">1.0.0</h2>
+<ul><li>Initial release
+</li>
+</ul>
+
+
+
+
+
+
+
+
+
+
+
+ <nav style="margin:1em 0">
+
+ <a style="float:left" href="https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.5/">
+ Migrating from Ranch 1.5 to 1.6
+ </a>
+
+
+
+ </nav>
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+
+ User Guide
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/guide">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/guide/migrating_from_2.0.asciidoc b/docs/en/ranch/2.1/guide/migrating_from_2.0.asciidoc
new file mode 100644
index 00000000..2b4b192c
--- /dev/null
+++ b/docs/en/ranch/2.1/guide/migrating_from_2.0.asciidoc
@@ -0,0 +1,70 @@
+[appendix]
+== Migrating from Ranch 2.0 to Ranch 2.1
+
+Ranch 2.1 adds counters and alarms.
+
+The https://github.com/juhlig/prometheus_ranch[Prometheus collector]
+was updated to include accepted/terminated connections
+metrics.
+
+Ranch 2.1 is compatible with Erlang/OTP 22.0 onward. Support
+for Erlang/OTP 21 has been removed.
+
+=== Features added
+
+* Metrics are now provided by `ranch:info/0,1`. Currently
+ includes accepted/terminated connection counts per
+ connection supervisor.
+
+* Alarms can now be configured. The only alarm currently
+ available is `num_connections`. When the number of
+ connections goes over a configurable treshold Ranch
+ will call the given callback. This can be used to
+ programmatically shut down idle connections to
+ make up space for new connections, for example.
+
+* A `post_listen` callback option has been added. It
+ receives sockets immediately after the `Transport:listen/1`
+ call. It can be used for some additional initialization
+ of the socket, such as setting file permissions on
+ Unix domain sockets.
+
+* It is now possible to use TLS-PSK authentication
+ without having to specify a default certificate
+ for TLS < 1.3.
+
+=== Experimental features added
+
+* The `inet_backend` option is now properly handled
+ and tested for TCP listeners. This allows using
+ the experimental `socket` backend. The `socket`
+ backend is now tested with Ranch. Note that
+ there are known issues and Windows support is not
+ currently implemented.
+
+=== Changed behaviors
+
+* Ranch will now remove unsupported SSL/TLS options
+ where applicable. A warning will be logged when
+ this happens. Options are only removed when they
+ are not compatible with the selected TLS version
+ and leaving them would prevent the listener from
+ starting.
++
+ The following options are removed when using TLS
+ 1.1, 1.2 or 1.3: `beast_mitigation` and `padding_check`.
++
+ The following options are removed when using TLS
+ 1.3 exclusively: `client_renegotiation`,
+ `next_protocols_advertised`, `psk_identity`,
+ `reuse_session`, `reuse_sessions`,
+ `secure_renegotiate` and `user_lookup_fun`.
+
+=== Added functions
+
+* The function `ranch_proxy_header:to_connection_info/1`
+ converts PROXY protocol information to the same
+ format as `ssl:connection_information/1`. Because
+ there is little overlap only the `protocol`,
+ `selected_cipher_suite` and `sni_hostname` will
+ be available, however.
diff --git a/docs/en/ranch/2.1/guide/migrating_from_2.0/index.html b/docs/en/ranch/2.1/guide/migrating_from_2.0/index.html
new file mode 100644
index 00000000..2e17a487
--- /dev/null
+++ b/docs/en/ranch/2.1/guide/migrating_from_2.0/index.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: Migrating from Ranch 2.0 to Ranch 2.1</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>Migrating from Ranch 2.0 to Ranch 2.1</span></h1>
+
+<p>Ranch 2.1 adds counters and alarms.</p>
+<p>The <a href="https://github.com/juhlig/prometheus_ranch">Prometheus collector</a> was updated to include accepted/terminated connections metrics.</p>
+<p>Ranch 2.1 is compatible with Erlang/OTP 22.0 onward. Support for Erlang/OTP 21 has been removed.</p>
+<h2 id="_features_added">Features added</h2>
+<ul><li>Metrics are now provided by <code>ranch:info/0,1</code>. Currently includes accepted/terminated connection counts per connection supervisor.
+</li>
+<li>Alarms can now be configured. The only alarm currently available is <code>num_connections</code>. When the number of connections goes over a configurable treshold Ranch will call the given callback. This can be used to programmatically shut down idle connections to make up space for new connections, for example.
+</li>
+<li>A <code>post_listen</code> callback option has been added. It receives sockets immediately after the <code>Transport:listen/1</code> call. It can be used for some additional initialization of the socket, such as setting file permissions on Unix domain sockets.
+</li>
+<li>It is now possible to use TLS-PSK authentication without having to specify a default certificate for TLS &lt; 1.3.
+</li>
+</ul>
+<h2 id="_experimental_features_added">Experimental features added</h2>
+<ul><li>The <code>inet_backend</code> option is now properly handled and tested for TCP listeners. This allows using the experimental <code>socket</code> backend. The <code>socket</code> backend is now tested with Ranch. Note that there are known issues and Windows support is not currently implemented.
+</li>
+</ul>
+<h2 id="_changed_behaviors">Changed behaviors</h2>
+<ul><li>Ranch will now remove unsupported SSL/TLS options where applicable. A warning will be logged when this happens. Options are only removed when they are not compatible with the selected TLS version and leaving them would prevent the listener from starting.
+<p>The following options are removed when using TLS 1.1, 1.2 or 1.3: <code>beast_mitigation</code> and <code>padding_check</code>.</p>
+<p>The following options are removed when using TLS 1.3 exclusively: <code>client_renegotiation</code>, <code>next_protocols_advertised</code>, <code>psk_identity</code>, <code>reuse_session</code>, <code>reuse_sessions</code>, <code>secure_renegotiate</code> and <code>user_lookup_fun</code>.</p>
+</li>
+</ul>
+<h2 id="_added_functions">Added functions</h2>
+<ul><li>The function <code>ranch_proxy_header:to_connection_info/1</code> converts PROXY protocol information to the same format as <code>ssl:connection_information/1</code>. Because there is little overlap only the <code>protocol</code>, <code>selected_cipher_suite</code> and <code>sni_hostname</code> will be available, however.
+</li>
+</ul>
+
+
+
+
+
+
+
+
+
+
+
+ <nav style="margin:1em 0">
+
+ <a style="float:left" href="https://ninenines.eu/docs/en/ranch/2.1/guide/internals/">
+ Internals
+ </a>
+
+
+
+ <a style="float:right" href="https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.7/">
+ Migrating from Ranch 1.7&#43; to Ranch 2.0
+ </a>
+
+ </nav>
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+
+ User Guide
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/guide">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/1.5/guide/parsers.asciidoc b/docs/en/ranch/2.1/guide/parsers.asciidoc
index 9eacbfa9..7a9c5a53 100644
--- a/docs/en/ranch/1.5/guide/parsers.asciidoc
+++ b/docs/en/ranch/2.1/guide/parsers.asciidoc
@@ -21,7 +21,7 @@ will only cover the first two.
Text protocols are generally line based. This means that we can't
do anything with them until we receive the full line.
-A simple way to get a full line is to use `binary:split/{2,3}`.
+A simple way to get a full line is to use `binary:split/2,3`.
.Using binary:split/2 to get a line of input
diff --git a/docs/en/ranch/1.5/guide/parsers/index.html b/docs/en/ranch/2.1/guide/parsers/index.html
index 7dfa3675..ffcb0932 100644
--- a/docs/en/ranch/1.5/guide/parsers/index.html
+++ b/docs/en/ranch/2.1/guide/parsers/index.html
@@ -74,7 +74,7 @@
<p>This chapter isn&apos;t specifically about Ranch, we assume here that you know how to read data from the socket. The data you read and the data that hasn&apos;t been parsed is saved in a buffer. Every time you read from the socket, the data read is appended to the buffer. What happens next depends on the kind of protocol. We will only cover the first two.</p>
<h2 id="_parsing_text">Parsing text</h2>
<p>Text protocols are generally line based. This means that we can&apos;t do anything with them until we receive the full line.</p>
-<p>A simple way to get a full line is to use <code>binary:split/{2,3}</code>.</p>
+<p>A simple way to get a full line is to use <code>binary:split/2,3</code>.</p>
<div class="listingblock"><div class="title">Using binary:split/2 to get a line of input</div>
<div class="content"><!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
@@ -137,13 +137,13 @@ http://www.gnu.org/software/src-highlite -->
<nav style="margin:1em 0">
- <a style="float:left" href="https://ninenines.eu/docs/en/ranch/1.5/guide/embedded/">
+ <a style="float:left" href="https://ninenines.eu/docs/en/ranch/2.1/guide/embedded/">
Embedded mode
</a>
- <a style="float:right" href="https://ninenines.eu/docs/en/ranch/1.5/guide/ssl_auth/">
+ <a style="float:right" href="https://ninenines.eu/docs/en/ranch/2.1/guide/ssl_auth/">
SSL client authentication
</a>
@@ -159,17 +159,17 @@ http://www.gnu.org/software/src-highlite -->
<h3>
Ranch
- 1.5
+ 2.1
User Guide
</h3>
<ul>
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
</ul>
@@ -181,6 +181,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -189,8 +191,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.1/guide/protocols.asciidoc b/docs/en/ranch/2.1/guide/protocols.asciidoc
new file mode 100644
index 00000000..8f55cea2
--- /dev/null
+++ b/docs/en/ranch/2.1/guide/protocols.asciidoc
@@ -0,0 +1,113 @@
+== Protocols
+
+A protocol handler starts a connection process and defines the
+protocol logic executed in this process.
+
+=== Writing a protocol handler
+
+All protocol handlers must implement the `ranch_protocol` behavior
+which defines a single callback, `start_link/3`. This callback is
+responsible for spawning a new process for handling the connection.
+It receives three arguments: the name of the listener, the
+transport handler being used and the protocol options defined in
+the call to `ranch:start_listener/5`. This callback must
+return `{ok, Pid}`, with `Pid` the pid of the new process.
+
+The newly started process can then freely initialize itself. However,
+it must call `ranch:handshake/1,2` before doing any socket operation.
+This will ensure the connection process is the owner of the socket.
+It expects the listener's name as argument.
+
+.Perform the socket handshake
+
+[source,erlang]
+{ok, Socket} = ranch:handshake(Ref).
+
+If your protocol code requires specific socket options, you should
+set them while initializing your connection process, after
+calling `ranch:handshake/1,2`. You can use `Transport:setopts/2`
+for that purpose.
+
+Following is the complete protocol code for the example found
+in `examples/tcp_echo/`.
+
+.Protocol module that echoes everything it receives
+
+[source,erlang]
+----
+-module(echo_protocol).
+-behaviour(ranch_protocol).
+
+-export([start_link/3]).
+-export([init/3]).
+
+start_link(Ref, Transport, Opts) ->
+ Pid = spawn_link(?MODULE, init, [Ref, Transport, Opts]),
+ {ok, Pid}.
+
+init(Ref, Transport, _Opts = []) ->
+ {ok, Socket} = ranch:handshake(Ref),
+ loop(Socket, Transport).
+
+loop(Socket, Transport) ->
+ case Transport:recv(Socket, 0, 5000) of
+ {ok, Data} ->
+ Transport:send(Socket, Data),
+ loop(Socket, Transport);
+ _ ->
+ ok = Transport:close(Socket)
+ end.
+----
+
+=== Using gen_statem and gen_server
+
+Special processes like the ones that use the `gen_statem` or `gen_server`
+behaviours have the particularity of having their `start_link` call not
+return until the `init` function returns. This is problematic, because
+you won't be able to call `ranch:handshake/1,2` from the `init` callback
+as this would cause a deadlock to happen.
+
+This problem can be addressed in several ways.
+
+==== gen_statem
+
+* Use state enter calls and place the `ranch:handshake/1,2` call in the enter
+ clause of the initial state. Check the `tcp_reverse` example for a complete
+ example.
+* Use a `next_event` action in the return from `init/1` and place the
+ `ranch:handshake/1,2` call in the clause handling the event in the initial
+ state.
+* Use the `gen_statem:enter_loop/4` function and start your process with
+ `proc_lib:spawn_link/3` or `proc_lib:start_link/3,4,5`. See below for an
+ example.
+
+.Using gen_statem:enter_loop/4 to start a protocol
+
+[source,erlang]
+----
+-module(my_protocol).
+-behaviour(gen_statem).
+-behaviour(ranch_protocol).
+
+-export([start_link/3]).
+-export([init/1]).
+%% Exports of other gen_statem callbacks here.
+
+start_link(Ref, Transport, Opts) ->
+ {ok, proc_lib:spawn_link(?MODULE, init, [{Ref, Transport, Opts}])}.
+
+init({Ref, Transport, _Opts}) ->
+ %% Perform any required state initialization here.
+ {ok, Socket} = ranch:handshake(Ref),
+ ok = Transport:setopts(Socket, [{active, once}]),
+ gen_statem:enter_loop(?MODULE, [], state_name, {state_data, Socket, Transport}).
+
+%% Other gen_statem callbacks here.
+----
+
+==== gen_server
+
+* Use `{continue, Continue}` in the return from `init/1` and place the
+ `ranch:handshake/1,2` call in a corresponding `handle_continue/2` clause.
+* Use the `gen_server:enter_loop/3` function and start your process with
+ `proc_lib:spawn_link/3` or `proc_lib:start_link/3,4,5`.
diff --git a/docs/en/ranch/1.5/guide/protocols/index.html b/docs/en/ranch/2.1/guide/protocols/index.html
index dcba343e..d275248c 100644
--- a/docs/en/ranch/1.5/guide/protocols/index.html
+++ b/docs/en/ranch/2.1/guide/protocols/index.html
@@ -64,16 +64,16 @@
<p>A protocol handler starts a connection process and defines the protocol logic executed in this process.</p>
<h2 id="_writing_a_protocol_handler">Writing a protocol handler</h2>
-<p>All protocol handlers must implement the <code>ranch_protocol</code> behavior which defines a single callback, <code>start_link/4</code>. This callback is responsible for spawning a new process for handling the connection. It receives four arguments: the name of the listener, the socket, the transport handler being used and the protocol options defined in the call to <code>ranch:start_listener/5</code>. This callback must return <code>{ok, Pid}</code>, with <code>Pid</code> the pid of the new process.</p>
-<p>The newly started process can then freely initialize itself. However, it must call <code>ranch:accept_ack/1</code> before doing any socket operation. This will ensure the connection process is the owner of the socket. It expects the listener&apos;s name as argument.</p>
-<div class="listingblock"><div class="title">Acknowledge accepting the socket</div>
+<p>All protocol handlers must implement the <code>ranch_protocol</code> behavior which defines a single callback, <code>start_link/3</code>. This callback is responsible for spawning a new process for handling the connection. It receives three arguments: the name of the listener, the transport handler being used and the protocol options defined in the call to <code>ranch:start_listener/5</code>. This callback must return <code>{ok, Pid}</code>, with <code>Pid</code> the pid of the new process.</p>
+<p>The newly started process can then freely initialize itself. However, it must call <code>ranch:handshake/1,2</code> before doing any socket operation. This will ensure the connection process is the owner of the socket. It expects the listener&apos;s name as argument.</p>
+<div class="listingblock"><div class="title">Perform the socket handshake</div>
<div class="content"><!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><tt><font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:accept_ack</font></b>(<font color="#009900">Ref</font>)<font color="#990000">.</font></tt></pre>
+<pre><tt>{<font color="#FF6600">ok</font>, <font color="#009900">Socket</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:handshake</font></b>(<font color="#009900">Ref</font>)<font color="#990000">.</font></tt></pre>
</div></div>
-<p>If your protocol code requires specific socket options, you should set them while initializing your connection process, after calling <code>ranch:accept_ack/1</code>. You can use <code>Transport:setopts/2</code> for that purpose.</p>
+<p>If your protocol code requires specific socket options, you should set them while initializing your connection process, after calling <code>ranch:handshake/1,2</code>. You can use <code>Transport:setopts/2</code> for that purpose.</p>
<p>Following is the complete protocol code for the example found in <code>examples/tcp_echo/</code>.</p>
<div class="listingblock"><div class="title">Protocol module that echoes everything it receives</div>
<div class="content"><!-- Generator: GNU source-highlight 3.1.9
@@ -83,15 +83,15 @@ http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000080">-module</font></b>(<font color="#FF6600">echo_protocol</font>)<font color="#990000">.</font>
<b><font color="#000080">-behaviour</font></b>(<font color="#FF6600">ranch_protocol</font>)<font color="#990000">.</font>
-<b><font color="#000080">-export</font></b>([<b><font color="#000000">start_link</font></b><font color="#990000">/</font><font color="#993399">4</font>])<font color="#990000">.</font>
-<b><font color="#000080">-export</font></b>([<b><font color="#000000">init</font></b><font color="#990000">/</font><font color="#993399">4</font>])<font color="#990000">.</font>
+<b><font color="#000080">-export</font></b>([<b><font color="#000000">start_link</font></b><font color="#990000">/</font><font color="#993399">3</font>])<font color="#990000">.</font>
+<b><font color="#000080">-export</font></b>([<b><font color="#000000">init</font></b><font color="#990000">/</font><font color="#993399">3</font>])<font color="#990000">.</font>
-<b><font color="#000000">start_link</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Socket</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>) <font color="#990000">-&gt;</font>
- <font color="#009900">Pid</font> <font color="#990000">=</font> <b><font color="#000080">spawn_link</font></b>(<b><font color="#000080">?MODULE</font></b>, <font color="#FF6600">init</font>, [<font color="#009900">Ref</font>, <font color="#009900">Socket</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>]),
+<b><font color="#000000">start_link</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>) <font color="#990000">-&gt;</font>
+ <font color="#009900">Pid</font> <font color="#990000">=</font> <b><font color="#000080">spawn_link</font></b>(<b><font color="#000080">?MODULE</font></b>, <font color="#FF6600">init</font>, [<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>]),
{<font color="#FF6600">ok</font>, <font color="#009900">Pid</font>}<font color="#990000">.</font>
-<b><font color="#000000">init</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Socket</font>, <font color="#009900">Transport</font>, <font color="#009900">_Opts</font> <font color="#990000">=</font> []) <font color="#990000">-&gt;</font>
- <font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:accept_ack</font></b>(<font color="#009900">Ref</font>),
+<b><font color="#000000">init</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">_Opts</font> <font color="#990000">=</font> []) <font color="#990000">-&gt;</font>
+ {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:handshake</font></b>(<font color="#009900">Ref</font>),
<b><font color="#000000">loop</font></b>(<font color="#009900">Socket</font>, <font color="#009900">Transport</font>)<font color="#990000">.</font>
<b><font color="#000000">loop</font></b>(<font color="#009900">Socket</font>, <font color="#009900">Transport</font>) <font color="#990000">-&gt;</font>
@@ -103,34 +103,47 @@ http://www.gnu.org/software/src-highlite -->
<font color="#0000FF">ok</font> <font color="#990000">=</font> <font color="#009900">Transport</font><font color="#990000">:</font><b><font color="#000000">close</font></b>(<font color="#009900">Socket</font>)
<b><font color="#0000FF">end</font></b><font color="#990000">.</font></tt></pre>
</div></div>
-<h2 id="_using_gen_server">Using gen_server</h2>
-<p>Special processes like the ones that use the <code>gen_server</code> or <code>gen_fsm</code> behaviours have the particularity of having their <code>start_link</code> call not return until the <code>init</code> function returns. This is problematic, because you won&apos;t be able to call <code>ranch:accept_ack/1</code> from the <code>init</code> callback as this would cause a deadlock to happen.</p>
-<p>Use the <code>gen_server:enter_loop/3</code> function. It allows you to start your process normally (although it must be started with <code>proc_lib</code> like all special processes), then perform any needed operations before falling back into the normal <code>gen_server</code> execution loop.</p>
-<div class="listingblock"><div class="title">Use a gen_server for protocol handling</div>
+<h2 id="_using_gen_statem_and_gen_server">Using gen_statem and gen_server</h2>
+<p>Special processes like the ones that use the <code>gen_statem</code> or <code>gen_server</code> behaviours have the particularity of having their <code>start_link</code> call not return until the <code>init</code> function returns. This is problematic, because you won&apos;t be able to call <code>ranch:handshake/1,2</code> from the <code>init</code> callback as this would cause a deadlock to happen.</p>
+<p>This problem can be addressed in several ways.</p>
+<h4 id="_gen_statem">gen_statem</h4>
+<ul><li>Use state enter calls and place the <code>ranch:handshake/1,2</code> call in the enter clause of the initial state. Check the <code>tcp_reverse</code> example for a complete example.
+</li>
+<li>Use a <code>next_event</code> action in the return from <code>init/1</code> and place the <code>ranch:handshake/1,2</code> call in the clause handling the event in the initial state.
+</li>
+<li>Use the <code>gen_statem:enter_loop/4</code> function and start your process with <code>proc_lib:spawn_link/3</code> or <code>proc_lib:start_link/3,4,5</code>. See below for an example.
+</li>
+</ul>
+<div class="listingblock"><div class="title">Using gen_statem:enter_loop/4 to start a protocol</div>
<div class="content"><!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000080">-module</font></b>(<font color="#FF6600">my_protocol</font>)<font color="#990000">.</font>
-<b><font color="#000080">-behaviour</font></b>(<font color="#FF6600">gen_server</font>)<font color="#990000">.</font>
+<b><font color="#000080">-behaviour</font></b>(<font color="#FF6600">gen_statem</font>)<font color="#990000">.</font>
<b><font color="#000080">-behaviour</font></b>(<font color="#FF6600">ranch_protocol</font>)<font color="#990000">.</font>
-<b><font color="#000080">-export</font></b>([<b><font color="#000000">start_link</font></b><font color="#990000">/</font><font color="#993399">4</font>])<font color="#990000">.</font>
+<b><font color="#000080">-export</font></b>([<b><font color="#000000">start_link</font></b><font color="#990000">/</font><font color="#993399">3</font>])<font color="#990000">.</font>
<b><font color="#000080">-export</font></b>([<b><font color="#000000">init</font></b><font color="#990000">/</font><font color="#993399">1</font>])<font color="#990000">.</font>
-<i><font color="#9A1900">%% Exports of other gen_server callbacks here.</font></i>
+<i><font color="#9A1900">%% Exports of other gen_statem callbacks here.</font></i>
-<b><font color="#000000">start_link</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Socket</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>) <font color="#990000">-&gt;</font>
- {<font color="#FF6600">ok</font>, <b><font color="#000000">proc_lib:spawn_link</font></b>(<b><font color="#000080">?MODULE</font></b>, <font color="#FF6600">init</font>, [{<font color="#009900">Ref</font>, <font color="#009900">Socket</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>}])}<font color="#990000">.</font>
+<b><font color="#000000">start_link</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>) <font color="#990000">-&gt;</font>
+ {<font color="#FF6600">ok</font>, <b><font color="#000000">proc_lib:spawn_link</font></b>(<b><font color="#000080">?MODULE</font></b>, <font color="#FF6600">init</font>, [{<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>}])}<font color="#990000">.</font>
-<b><font color="#000000">init</font></b>({<font color="#009900">Ref</font>, <font color="#009900">Socket</font>, <font color="#009900">Transport</font>, <font color="#009900">_Opts</font> <font color="#990000">=</font> []}) <font color="#990000">-&gt;</font>
+<b><font color="#000000">init</font></b>({<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">_Opts</font>}) <font color="#990000">-&gt;</font>
<i><font color="#9A1900">%% Perform any required state initialization here.</font></i>
- <font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:accept_ack</font></b>(<font color="#009900">Ref</font>),
+ {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:handshake</font></b>(<font color="#009900">Ref</font>),
<font color="#0000FF">ok</font> <font color="#990000">=</font> <font color="#009900">Transport</font><font color="#990000">:</font><b><font color="#000000">setopts</font></b>(<font color="#009900">Socket</font>, [{<font color="#FF6600">active</font>, <font color="#FF6600">once</font>}]),
- <b><font color="#000000">gen_server:enter_loop</font></b>(<b><font color="#000080">?MODULE</font></b>, [], {<font color="#FF6600">state</font>, <font color="#009900">Socket</font>, <font color="#009900">Transport</font>})<font color="#990000">.</font>
+ <b><font color="#000000">gen_statem:enter_loop</font></b>(<b><font color="#000080">?MODULE</font></b>, [], <font color="#FF6600">state_name</font>, {<font color="#FF6600">state_data</font>, <font color="#009900">Socket</font>, <font color="#009900">Transport</font>})<font color="#990000">.</font>
-<i><font color="#9A1900">%% Other gen_server callbacks here.</font></i></tt></pre>
+<i><font color="#9A1900">%% Other gen_statem callbacks here.</font></i></tt></pre>
</div></div>
-<p>Check the <code>tcp_reverse</code> example for a complete example.</p>
+<h4 id="_gen_server">gen_server</h4>
+<ul><li>Use <code>{continue, Continue}</code> in the return from <code>init/1</code> and place the <code>ranch:handshake/1,2</code> call in a corresponding <code>handle_continue/2</code> clause.
+</li>
+<li>Use the <code>gen_server:enter_loop/3</code> function and start your process with <code>proc_lib:spawn_link/3</code> or <code>proc_lib:start_link/3,4,5</code>.
+</li>
+</ul>
@@ -144,13 +157,13 @@ http://www.gnu.org/software/src-highlite -->
<nav style="margin:1em 0">
- <a style="float:left" href="https://ninenines.eu/docs/en/ranch/1.5/guide/transports/">
+ <a style="float:left" href="https://ninenines.eu/docs/en/ranch/2.1/guide/transports/">
Transports
</a>
- <a style="float:right" href="https://ninenines.eu/docs/en/ranch/1.5/guide/embedded/">
+ <a style="float:right" href="https://ninenines.eu/docs/en/ranch/2.1/guide/embedded/">
Embedded mode
</a>
@@ -166,17 +179,17 @@ http://www.gnu.org/software/src-highlite -->
<h3>
Ranch
- 1.5
+ 2.1
User Guide
</h3>
<ul>
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
</ul>
@@ -188,6 +201,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -196,8 +211,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.5/guide/ssl_auth.asciidoc b/docs/en/ranch/2.1/guide/ssl_auth.asciidoc
index de16107a..f4364d06 100644
--- a/docs/en/ranch/1.5/guide/ssl_auth.asciidoc
+++ b/docs/en/ranch/2.1/guide/ssl_auth.asciidoc
@@ -10,7 +10,7 @@ based authentication to attain greater security.
The server only needs to retain the certificate serial number and
the certificate issuer to authenticate the certificate. Together,
-they can be used to uniquely identify a certicate.
+they can be used to uniquely identify a certificate.
As Ranch allows the same protocol code to be used for both SSL and
non-SSL transports, you need to make sure you are in an SSL context
@@ -50,12 +50,12 @@ the listener to enable this behavior.
[source,erlang]
{ok, _} = ranch:start_listener(my_ssl,
- ranch_ssl, [
+ ranch_ssl, #{socket_opts => [
{port, SSLPort},
{certfile, PathToCertfile},
{cacertfile, PathToCACertfile},
{verify, verify_peer}
- ],
+ ]},
my_protocol, []
).
diff --git a/docs/en/ranch/1.5/guide/ssl_auth/index.html b/docs/en/ranch/2.1/guide/ssl_auth/index.html
index 317953d4..2ad9a96a 100644
--- a/docs/en/ranch/1.5/guide/ssl_auth/index.html
+++ b/docs/en/ranch/2.1/guide/ssl_auth/index.html
@@ -64,7 +64,7 @@
<h2 id="_purpose">Purpose</h2>
<p>SSL client authentication is a mechanism allowing applications to identify certificates. This allows your application to make sure that the client is an authorized certificate, but makes no claim about whether the user can be trusted. This can be combined with a password based authentication to attain greater security.</p>
-<p>The server only needs to retain the certificate serial number and the certificate issuer to authenticate the certificate. Together, they can be used to uniquely identify a certicate.</p>
+<p>The server only needs to retain the certificate serial number and the certificate issuer to authenticate the certificate. Together, they can be used to uniquely identify a certificate.</p>
<p>As Ranch allows the same protocol code to be used for both SSL and non-SSL transports, you need to make sure you are in an SSL context before attempting to perform an SSL client authentication. This can be done by checking the return value of <code>Transport:name/0</code>.</p>
<h2 id="_obtaining_client_certificates">Obtaining client certificates</h2>
<p>You can obtain client certificates from various sources. You can generate them yourself, or you can use a service like CAcert.org which allows you to generate client and server certificates for free.</p>
@@ -95,12 +95,12 @@ by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt>{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:start_listener</font></b>(<font color="#FF6600">my_ssl</font>,
- <font color="#FF6600">ranch_ssl</font>, [
+ <font color="#FF6600">ranch_ssl</font>, #{<font color="#0000FF">socket_opts</font> <font color="#990000">=&gt;</font> [
{<font color="#FF6600">port</font>, <font color="#009900">SSLPort</font>},
{<font color="#FF6600">certfile</font>, <font color="#009900">PathToCertfile</font>},
{<font color="#FF6600">cacertfile</font>, <font color="#009900">PathToCACertfile</font>},
{<font color="#FF6600">verify</font>, <font color="#FF6600">verify_peer</font>}
- ],
+ ]},
<font color="#FF6600">my_protocol</font>, []
)<font color="#990000">.</font></tt></pre>
</div></div>
@@ -150,14 +150,14 @@ http://www.gnu.org/software/src-highlite -->
<nav style="margin:1em 0">
- <a style="float:left" href="https://ninenines.eu/docs/en/ranch/1.5/guide/parsers/">
+ <a style="float:left" href="https://ninenines.eu/docs/en/ranch/2.1/guide/parsers/">
Writing parsers
</a>
- <a style="float:right" href="https://ninenines.eu/docs/en/ranch/1.5/guide/internals/">
- Internals
+ <a style="float:right" href="https://ninenines.eu/docs/en/ranch/2.1/guide/connection_draining/">
+ Connection draining
</a>
</nav>
@@ -172,17 +172,17 @@ http://www.gnu.org/software/src-highlite -->
<h3>
Ranch
- 1.5
+ 2.1
User Guide
</h3>
<ul>
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
</ul>
@@ -194,6 +194,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -202,8 +204,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.5/guide/transports.asciidoc b/docs/en/ranch/2.1/guide/transports.asciidoc
index f5bb17eb..73747fd5 100644
--- a/docs/en/ranch/1.5/guide/transports.asciidoc
+++ b/docs/en/ranch/2.1/guide/transports.asciidoc
@@ -70,27 +70,29 @@ this call return as soon as data was read, regardless of its size.
Active mode requires you to inform the socket that you want to receive
data as a message and to write the code to actually receive it.
-There are two kinds of active modes: `{active, once}` and
-`{active, true}`. The first will send a single message before going
-back to passive mode; the second will send messages indefinitely.
-We recommend not using the `{active, true}` mode as it could quickly
-flood your process mailbox. It's better to keep the data in the socket
-and read it only when required.
-
-Three different messages can be received:
-
-* `{OK, Socket, Data}`
-* `{Closed, Socket}`
-* `{Error, Socket, Reason}`
-
-The value of `OK`, `Closed` and `Error` can be different
+There are three kinds of active modes: `{active, once}`, `{active, N}`
+and `{active, true}`. The first will send a single message before going
+back to passive mode; the second will send `N` messages followed by
+a `Passive` message when switching back to passive mode; the third
+will send messages indefinitely. We recommend not using the `{active, true}`
+mode as it could quickly flood your process mailbox. It's better to keep
+the data in the socket and read it only when required.
+
+Four different messages can be received:
+
+* Incoming data: `{OK, Socket, Data}`
+* Socket closed: `{Closed, Socket}`
+* Socket error: `{Error, Socket, Reason}`
+* Switch to passive mode: `{Passive, Socket}`
+
+The value of `OK`, `Closed`, `Error` and `Passive` can be different
depending on the transport being used. To be able to properly match
on them you must first call the `Transport:messages/0` function.
.Retrieving the transport's active message identifiers
[source,erlang]
-{OK, Closed, Error} = Transport:messages().
+{OK, Closed, Error, Passive} = Transport:messages().
To start receiving messages you will need to call the `Transport:setopts/2`
function, and do so every time you want to receive data.
@@ -99,7 +101,7 @@ function, and do so every time you want to receive data.
[source,erlang]
----
-{OK, Closed, Error} = Transport:messages(),
+{OK, Closed, Error, Passive} = Transport:messages(),
Transport:setopts(Socket, [{active, once}]),
receive
{OK, Socket, Data} ->
@@ -144,6 +146,20 @@ possible to use a file descriptor opened in raw mode:
{ok, RawFile} = file:open(Filename, [raw, read, binary]),
{ok, SentBytes} = Transport:sendfile(Socket, RawFile, Offset, Bytes, Opts).
+=== Upgrading a TCP socket to SSL
+
+A connected TCP socket can be upgraded to a SSL socket via the function
+`ranch_ssl:handshake/3`. The socket *must* be in `{active, false}` mode
+before telling the client that the server is ready to upgrade in order
+to avoid race conditions.
+
+IMPORTANT: The new socket received from `ranch_ssl:handshake/3` must be
+used via the `ranch_ssl` transport.
+
+.Performing a TLS handshake on a TCP socket
+[source,erlang]
+{ok, SslSocket} = ranch_ssl:handshake(TcpSocket, SslOpts, 5000).
+
=== Writing a transport handler
A transport handler is a module implementing the `ranch_transport` behavior.
diff --git a/docs/en/ranch/1.5/guide/transports/index.html b/docs/en/ranch/2.1/guide/transports/index.html
index edaf0cd4..b6238f4b 100644
--- a/docs/en/ranch/1.5/guide/transports/index.html
+++ b/docs/en/ranch/2.1/guide/transports/index.html
@@ -95,22 +95,24 @@ http://www.gnu.org/software/src-highlite -->
<pre><tt>{<font color="#FF6600">ok</font>, <font color="#009900">Data</font>} <font color="#990000">=</font> <font color="#009900">Transport</font><font color="#990000">:</font><b><font color="#000000">recv</font></b>(<font color="#009900">Socket</font>, <font color="#993399">0</font>, <font color="#993399">5000</font>)<font color="#990000">.</font></tt></pre>
</div></div>
<p>Active mode requires you to inform the socket that you want to receive data as a message and to write the code to actually receive it.</p>
-<p>There are two kinds of active modes: <code>{active, once}</code> and <code>{active, true}</code>. The first will send a single message before going back to passive mode; the second will send messages indefinitely. We recommend not using the <code>{active, true}</code> mode as it could quickly flood your process mailbox. It&apos;s better to keep the data in the socket and read it only when required.</p>
-<p>Three different messages can be received:</p>
-<ul><li><code>{OK, Socket, Data}</code>
+<p>There are three kinds of active modes: <code>{active, once}</code>, <code>{active, N}</code> and <code>{active, true}</code>. The first will send a single message before going back to passive mode; the second will send <code>N</code> messages followed by a <code>Passive</code> message when switching back to passive mode; the third will send messages indefinitely. We recommend not using the <code>{active, true}</code> mode as it could quickly flood your process mailbox. It&apos;s better to keep the data in the socket and read it only when required.</p>
+<p>Four different messages can be received:</p>
+<ul><li>Incoming data: <code>{OK, Socket, Data}</code>
</li>
-<li><code>{Closed, Socket}</code>
+<li>Socket closed: <code>{Closed, Socket}</code>
</li>
-<li><code>{Error, Socket, Reason}</code>
+<li>Socket error: <code>{Error, Socket, Reason}</code>
+</li>
+<li>Switch to passive mode: <code>{Passive, Socket}</code>
</li>
</ul>
-<p>The value of <code>OK</code>, <code>Closed</code> and <code>Error</code> can be different depending on the transport being used. To be able to properly match on them you must first call the <code>Transport:messages/0</code> function.</p>
+<p>The value of <code>OK</code>, <code>Closed</code>, <code>Error</code> and <code>Passive</code> can be different depending on the transport being used. To be able to properly match on them you must first call the <code>Transport:messages/0</code> function.</p>
<div class="listingblock"><div class="title">Retrieving the transport&apos;s active message identifiers</div>
<div class="content"><!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><tt>{<font color="#009900">OK</font>, <font color="#009900">Closed</font>, <font color="#009900">Error</font>} <font color="#990000">=</font> <font color="#009900">Transport</font><font color="#990000">:</font><b><font color="#000000">messages</font></b>()<font color="#990000">.</font></tt></pre>
+<pre><tt>{<font color="#009900">OK</font>, <font color="#009900">Closed</font>, <font color="#009900">Error</font>, <font color="#009900">Passive</font>} <font color="#990000">=</font> <font color="#009900">Transport</font><font color="#990000">:</font><b><font color="#000000">messages</font></b>()<font color="#990000">.</font></tt></pre>
</div></div>
<p>To start receiving messages you will need to call the <code>Transport:setopts/2</code> function, and do so every time you want to receive data.</p>
<div class="listingblock"><div class="title">Receiving messages from the socket in active mode</div>
@@ -118,7 +120,7 @@ http://www.gnu.org/software/src-highlite -->
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
-<pre><tt>{<font color="#009900">OK</font>, <font color="#009900">Closed</font>, <font color="#009900">Error</font>} <font color="#990000">=</font> <font color="#009900">Transport</font><font color="#990000">:</font><b><font color="#000000">messages</font></b>(),
+<pre><tt>{<font color="#009900">OK</font>, <font color="#009900">Closed</font>, <font color="#009900">Error</font>, <font color="#009900">Passive</font>} <font color="#990000">=</font> <font color="#009900">Transport</font><font color="#990000">:</font><b><font color="#000000">messages</font></b>(),
<font color="#009900">Transport</font><font color="#990000">:</font><b><font color="#000000">setopts</font></b>(<font color="#009900">Socket</font>, [{<font color="#FF6600">active</font>, <font color="#FF6600">once</font>}]),
<b><font color="#0000FF">receive</font></b>
{<font color="#009900">OK</font>, <font color="#009900">Socket</font>, <font color="#009900">Data</font>} <font color="#990000">-&gt;</font>
@@ -158,6 +160,16 @@ http://www.gnu.org/software/src-highlite -->
<pre><tt>{<font color="#FF6600">ok</font>, <font color="#009900">RawFile</font>} <font color="#990000">=</font> <b><font color="#000000">file:open</font></b>(<font color="#009900">Filename</font>, [<font color="#FF6600">raw</font>, <font color="#FF6600">read</font>, <b><font color="#000080">binary</font></b>]),
{<font color="#FF6600">ok</font>, <font color="#009900">SentBytes</font>} <font color="#990000">=</font> <font color="#009900">Transport</font><font color="#990000">:</font><b><font color="#000000">sendfile</font></b>(<font color="#009900">Socket</font>, <font color="#009900">RawFile</font>, <font color="#009900">Offset</font>, <font color="#009900">Bytes</font>, <font color="#009900">Opts</font>)<font color="#990000">.</font></tt></pre>
</div></div>
+<h2 id="_upgrading_a_tcp_socket_to_ssl">Upgrading a TCP socket to SSL</h2>
+<p>A connected TCP socket can be upgraded to a SSL socket via the function <code>ranch_ssl:handshake/3</code>. The socket <strong>must</strong> be in <code>{active, false}</code> mode before telling the client that the server is ready to upgrade in order to avoid race conditions.</p>
+<p>IMPORTANT: The new socket received from <code>ranch_ssl:handshake/3</code> must be used via the <code>ranch_ssl</code> transport.</p>
+<div class="listingblock"><div class="title">Performing a TLS handshake on a TCP socket</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt>{<font color="#FF6600">ok</font>, <font color="#009900">SslSocket</font>} <font color="#990000">=</font> <b><font color="#000000">ranch_ssl:handshake</font></b>(<font color="#009900">TcpSocket</font>, <font color="#009900">SslOpts</font>, <font color="#993399">5000</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
<h2 id="_writing_a_transport_handler">Writing a transport handler</h2>
<p>A transport handler is a module implementing the <code>ranch_transport</code> behavior. It defines a certain number of callbacks that must be written in order to allow transparent usage of the transport handler.</p>
<p>The behavior doesn&apos;t define the socket options available when opening a socket. These do not need to be common to all transports as it&apos;s easy enough to write different initialization functions for the different transports that will be used. With one exception though. The <code>setopts/2</code> function <strong>must</strong> implement the <code>{active, once}</code> and the <code>{active, true}</code> options.</p>
@@ -175,13 +187,13 @@ http://www.gnu.org/software/src-highlite -->
<nav style="margin:1em 0">
- <a style="float:left" href="https://ninenines.eu/docs/en/ranch/1.5/guide/listeners/">
+ <a style="float:left" href="https://ninenines.eu/docs/en/ranch/2.1/guide/listeners/">
Listeners
</a>
- <a style="float:right" href="https://ninenines.eu/docs/en/ranch/1.5/guide/protocols/">
+ <a style="float:right" href="https://ninenines.eu/docs/en/ranch/2.1/guide/protocols/">
Protocols
</a>
@@ -197,17 +209,17 @@ http://www.gnu.org/software/src-highlite -->
<h3>
Ranch
- 1.5
+ 2.1
User Guide
</h3>
<ul>
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
</ul>
@@ -219,6 +231,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/guide">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/guide">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/guide">1.8</a></li>
@@ -227,8 +241,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/guide">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/guide">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.1/manual/index.html b/docs/en/ranch/2.1/manual/index.html
new file mode 100644
index 00000000..9a90e7ec
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/index.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: Ranch Function Reference</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>Ranch Function Reference</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch - Socket acceptor pool for TCP protocols</p>
+<h2 id="_description">Description</h2>
+<p>Ranch is a socket acceptor pool for TCP protocols.</p>
+<p>Ranch manages listeners which are a set of processes that accept and manage connections. The connection&apos;s transport and protocol modules are configured per listener. Listeners can be inspected and reconfigured without interruptions in service.</p>
+<h2 id="_modules">Modules</h2>
+<p>Functions:</p>
+<ul><li><a href="ranch">ranch(3)</a> - Socket acceptor pool
+</li>
+<li><a href="ranch_proxy_header">ranch_proxy_header(3)</a> - PROXY protocol
+</li>
+</ul>
+<p>Transports:</p>
+<ul><li><a href="ranch_ssl">ranch_ssl(3)</a> - SSL transport
+</li>
+<li><a href="ranch_tcp">ranch_tcp(3)</a> - TCP transport
+</li>
+</ul>
+<p>Behaviors:</p>
+<ul><li><a href="ranch_protocol">ranch_protocol(3)</a> - Protocol modules
+</li>
+<li><a href="ranch_transport">ranch_transport(3)</a> - Transport modules
+</li>
+</ul>
+<h2 id="_dependencies">Dependencies</h2>
+<ul><li>ssl - Secure communication over sockets
+</li>
+</ul>
+<p>All these applications must be started before the <code>ranch</code> application. To start Ranch and all dependencies at once:</p>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt>{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">application:ensure_all_started</font></b>(<font color="#FF6600">ranch</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_environment">Environment</h2>
+<p>The <code>ranch</code> application defines one application environment configuration parameter.</p>
+<dl><dt>profile (false)</dt>
+<dd><p>When enabled, Ranch will start <code>eprof</code> profiling automatically.</p>
+<p>You can use the <code>ranch_app:profile_output/0</code> function to stop profiling and output the results to the files <em>procs.profile</em> and <em>total.profile</em>. Do not use in production.</p>
+</dd>
+</dl>
+<h2 id="_see_also">See also</h2>
+<p>ssl(7)</p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.child_spec/index.html b/docs/en/ranch/2.1/manual/ranch.child_spec/index.html
new file mode 100644
index 00000000..b244d9ca
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.child_spec/index.html
@@ -0,0 +1,222 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:child_spec(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:child_spec(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:child_spec - Build child specifications for a new listener</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">child_spec</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch_ref</font></b>(),
+ <font color="#009900">Transport</font> <font color="#990000">::</font> <b><font color="#000000">module</font></b>(),
+ <font color="#009900">TransOpts</font> <font color="#990000">::</font> <b><font color="#000000">ranch:opts</font></b>(),
+ <font color="#009900">Protocol</font> <font color="#990000">::</font> <b><font color="#000000">module</font></b>(),
+ <font color="#009900">ProtoOpts</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>())
+ <font color="#990000">-&gt;</font> <b><font color="#000000">supervisor:child_spec</font></b>()</tt></pre>
+</div></div>
+<p>Build child specifications for a new listener which can be embedded directly in an application&apos;s supervision tree.</p>
+<p>The actual listener is placed under a supervisor which monitors <code>ranch_server</code> via a proxy process and will restart the listener if <code>ranch_server</code> crashes.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name is used to refer to this listener in future calls, for example when updating the configuration.</p>
+<p>It can be any Erlang term. An atom is generally good enough, for example <code>api</code>, <code>my_app_clear</code> or <code>my_app_tls</code>.</p>
+</dd>
+<dt>Transport</dt>
+<dd><p>The transport module that will be used by Ranch to accept connections and that will be passed to the protocol module along with the socket.</p>
+<p>The interface of the transport module is documented in the <a href="../ranch_transport">ranch_transport(3)</a> manual.</p>
+</dd>
+<dt>TransportOpts</dt>
+<dd><p>Transport options include the Ranch-specific options and the socket options. The listener&apos;s port number must be defined in the socket options.</p>
+<p>The available options for the built-in Ranch transports are documented in the <a href="../ranch_tcp">ranch_tcp(3)</a> and <a href="../ranch_ssl">ranch_ssl(3)</a> manuals.</p>
+</dd>
+<dt>Protocol</dt>
+<dd><p>The protocol module that will be used by Ranch after the connection has been accepted.</p>
+<p>The interface of the protocol module is documented in the <a href="../ranch_protocol">ranch_protocol(3)</a> manual.</p>
+</dd>
+<dt>ProtocolOpts</dt>
+<dd><p>The protocol options given when calling the protocol module. Please consult the documentation of the protocol module you are using for more details.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>Child specifications are returned.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: The actual listener is placed under a supervisor in order to restart the listener if <code>ranch_server</code> crashes.
+</li>
+<li><strong>2.0</strong>: The <code>TransOpts</code> argument must no longer contain Ranch-specific options if given as a list. Use a map.
+</li>
+<li><strong>1.4</strong>: The <code>NumAcceptors</code> argument was moved to the transport options.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Embed a listener</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000080">-behavior</font></b>(<font color="#FF6600">supervisor</font>)<font color="#990000">.</font>
+
+<b><font color="#000000">init</font></b>(<font color="#990000">_</font>) <font color="#990000">-&gt;</font>
+ {<font color="#FF6600">ok</font>, {#{<font color="#0000FF">strategy</font> <font color="#990000">=&gt;</font> <font color="#FF6600">one_for_one</font>}, [
+ <b><font color="#000000">ranch:child_spec</font></b>(<font color="#FF6600">echo</font>,
+ <font color="#FF6600">ranch_tcp</font>, [{<font color="#FF6600">port</font>, <font color="#993399">5555</font>}],
+ <font color="#FF6600">echo_protocol</font>, []
+ )
+ ]}}<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.start_listener">ranch:start_listener(3)</a>, <a href="../ranch.stop_listener">ranch:stop_listener(3)</a>, <a href="../ranch">ranch(3)</a>, <a href="../ranch_tcp">ranch_tcp(3)</a>, <a href="../ranch_ssl">ranch_ssl(3)</a>, <a href="../ranch_transport">ranch_transport(3)</a>, <a href="../ranch_protocol">ranch_protocol(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.get_addr/index.html b/docs/en/ranch/2.1/manual/ranch.get_addr/index.html
new file mode 100644
index 00000000..12ce9487
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.get_addr/index.html
@@ -0,0 +1,197 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:get_addr(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:get_addr(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:get_addr - Get the listening address</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">get_addr</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch:ref</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#009900">IP</font> <font color="#990000">::</font> <b><font color="#000000">inet:ip_address</font></b>(),
+ <font color="#009900">Port</font> <font color="#990000">::</font> <b><font color="#000000">inet:port_number</font></b>()}
+ | {<font color="#FF6600">local</font>, <font color="#009900">SocketFile</font> <font color="#990000">::</font> <b><font color="#000080">binary</font></b>()}
+ | {<font color="#000080">undefined</font>, <font color="#000080">undefined</font>}</tt></pre>
+</div></div>
+<p>Get the listening address.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The address of the listener is returned as a tuple of the form <code>{IP, Port}</code> when listening on a network interface, or <code>{local, SocketFile}</code> when listening on a UNIX Domain socket. When the listener is suspended, <code>{undefined, undefined}</code> will be returned.</p>
+<p>The IP address is the IP of the network interface the socket is bound to.</p>
+<p>The socket file is the path of a file on your system the socket is bound to.</p>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Get the listening port and IP</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt>{<font color="#009900">IP</font>, <font color="#009900">Port</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:get_addr</font></b>(<font color="#FF6600">example</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<div class="listingblock"><div class="title">Get the listening UNIX Domain socket file</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt>{<font color="#FF6600">local</font>, <font color="#009900">SocketFile</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:get_addr</font></b>(<font color="#FF6600">example</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.start_listener">ranch:start_listener(3)</a>, <a href="../ranch.get_port">ranch:get_port(3)</a>, <a href="../ranch.info">ranch:info(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.get_max_connections/index.html b/docs/en/ranch/2.1/manual/ranch.get_max_connections/index.html
new file mode 100644
index 00000000..70966780
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.get_max_connections/index.html
@@ -0,0 +1,189 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:get_max_connections(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:get_max_connections(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:get_max_connections - Get the max number of connections per connection supervisor</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">get_max_connections</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch:ref</font></b>())
+ <font color="#990000">-&gt;</font> <font color="#009900">MaxConns</font> <font color="#990000">::</font> <b><font color="#000000">ranch:max_conns</font></b>()</tt></pre>
+</div></div>
+<p>Get the max number of connections per connection supervisor.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The maximum number of connections per connection supervisor is returned.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: The maximum number of connections is now per connection supervisor.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Get the max number of connections per connection supervisor</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">MaxConns</font> <font color="#990000">=</font> <b><font color="#000000">ranch:get_max_connections</font></b>(<font color="#FF6600">example</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.get_protocol_options">ranch:get_protocol_options(3)</a>, <a href="../ranch.get_transport_options">ranch:get_transport_options(3)</a>, <a href="../ranch.set_max_connections">ranch:set_max_connections(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.get_port/index.html b/docs/en/ranch/2.1/manual/ranch.get_port/index.html
new file mode 100644
index 00000000..be771dc5
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.get_port/index.html
@@ -0,0 +1,187 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:get_port(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:get_port(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:get_port - Get the listening port</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">get_port</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch:ref</font></b>())
+ <font color="#990000">-&gt;</font> <font color="#009900">Port</font> <font color="#990000">::</font> <b><font color="#000000">inet:port_number</font></b>() | <font color="#000080">undefined</font></tt></pre>
+</div></div>
+<p>Get the listening port.</p>
+<p>This function is particularly useful to retrieve the listening port number when it was not provided in the options and was chosen randomly instead.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The listening port is returned.</p>
+<p>When the listener is suspended or using a UNIX Domain socket instead of a network interface, <code>undefined</code> will be returned.</p>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Get the listening port</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">Port</font> <font color="#990000">=</font> <b><font color="#000000">ranch:get_port</font></b>(<font color="#FF6600">example</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.start_listener">ranch:start_listener(3)</a>, <a href="../ranch.get_addr">ranch:get_addr(3)</a>, <a href="../ranch.info">ranch:info(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/1.5/manual/index.html b/docs/en/ranch/2.1/manual/ranch.get_protocol_options/index.html
index 34b26786..f60777b5 100644
--- a/docs/en/ranch/1.5/manual/index.html
+++ b/docs/en/ranch/2.1/manual/ranch.get_protocol_options/index.html
@@ -7,7 +7,7 @@
<meta name="description" content="">
<meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
- <title>Nine Nines: Ranch Function Reference</title>
+ <title>Nine Nines: ranch:get_protocol_options(3)</title>
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
<link href="/css/99s.css?r=7" rel="stylesheet">
@@ -60,21 +60,36 @@
<div class="row">
<div id="docs" class="span9 maincol">
-<h1 class="lined-header"><span>Ranch Function Reference</span></h1>
-
-<ul><li><a href="ranch_app">ranch(7)</a>
-</li>
-<li><a href="ranch">ranch(3)</a>
-</li>
-<li><a href="ranch_protocol">ranch_protocol(3)</a>
-</li>
-<li><a href="ranch_ssl">ranch_ssl(3)</a>
-</li>
-<li><a href="ranch_tcp">ranch_tcp(3)</a>
-</li>
-<li><a href="ranch_transport">ranch_transport(3)</a>
-</li>
-</ul>
+<h1 class="lined-header"><span>ranch:get_protocol_options(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:get_protocol_options - Get the current protocol options</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">get_protocol_options</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch:ref</font></b>())
+ <font color="#990000">-&gt;</font> <font color="#009900">ProtoOpts</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()</tt></pre>
+</div></div>
+<p>Get the current protocol options.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The current protocol options are returned.</p>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Get the current protocol options</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">ProtoOpts</font> <font color="#990000">=</font> <b><font color="#000000">ranch:get_protocol_options</font></b>(<font color="#FF6600">example</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.get_max_connections">ranch:get_max_connections(3)</a>, <a href="../ranch.get_transport_options">ranch:get_transport_options(3)</a>, <a href="../ranch.set_protocol_options">ranch:set_protocol_options(3)</a>, <a href="../ranch">ranch(3)</a></p>
@@ -88,17 +103,17 @@
<h3>
Ranch
- 1.5
+ 2.1
Function Reference
</h3>
<ul>
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
</ul>
@@ -110,6 +125,8 @@
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -118,8 +135,6 @@
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.1/manual/ranch.get_status/index.html b/docs/en/ranch/2.1/manual/ranch.get_status/index.html
new file mode 100644
index 00000000..64d2cf25
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.get_status/index.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:get_status(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:get_status(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:get_status - Get a listener&apos;s running state</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">get_status</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch_ref</font></b>()) <font color="#990000">-&gt;</font> <b><font color="#000080">running</font></b> | <font color="#FF6600">suspended</font></tt></pre>
+</div></div>
+<p>Get a listener&apos;s running state.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>An atom is returned indicating the running status of the listener.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>1.6</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Get a listener&apos;s running state</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">ranch:get_status</font></b>(<font color="#FF6600">example</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.start_listener">ranch:start_listener(3)</a>, <a href="../ranch.stop_listener">ranch:stop_listener(3)</a>, <a href="../ranch.suspend_listener">ranch:suspend_listener(3)</a>, <a href="../ranch.resume_listener">ranch:resume_listener(3)</a>, <a href="../ranch.set_transport_options">ranch:set_transport_options(3)</a>, <a href="../ranch.wait_for_connections">ranch:wait_for_connections(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.get_transport_options/index.html b/docs/en/ranch/2.1/manual/ranch.get_transport_options/index.html
new file mode 100644
index 00000000..89c97f1e
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.get_transport_options/index.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:get_transport_options(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:get_transport_options(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:get_transport_options - Get the current transport options</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">get_transport_options</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch:ref</font></b>())
+ <font color="#990000">-&gt;</font> <font color="#009900">TransOpts</font> <font color="#990000">::</font> <b><font color="#000000">ranch:transport_opts</font></b>(<b><font color="#000000">any</font></b>())</tt></pre>
+</div></div>
+<p>Get the current transport options.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The current transport options are returned.</p>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Get the current transport options</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">TransOpts</font> <font color="#990000">=</font> <b><font color="#000000">ranch:get_transport_options</font></b>(<font color="#FF6600">example</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.get_max_connections">ranch:get_max_connections(3)</a>, <a href="../ranch.get_protocol_options">ranch:get_protocol_options(3)</a>, <a href="../ranch.set_transport_options">ranch:set_transport_options(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.handshake/index.html b/docs/en/ranch/2.1/manual/ranch.handshake/index.html
new file mode 100644
index 00000000..4672ce45
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.handshake/index.html
@@ -0,0 +1,211 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:handshake(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:handshake(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:handshake - Perform the transport handshake</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">handshake</font></b>(<font color="#009900">Ref</font>) <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font>} | {<font color="#FF6600">continue</font>, <font color="#009900">Info</font>}
+<b><font color="#000000">handshake</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Opts</font>) <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font>} | {<font color="#FF6600">continue</font>, <font color="#009900">Info</font>}
+
+<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch:ref</font></b>()
+<font color="#009900">Opts</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()
+<font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()
+<font color="#009900">Info</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()</tt></pre>
+</div></div>
+<p>Perform the transport handshake.</p>
+<p>This function must be called by the protocol process in order to retrieve the socket for the connection. Ranch performs the handshake necessary to give control of the socket to this process and also does the transport handshake, for example setting up the TLS connection.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+<dt>Opts</dt>
+<dd><p>Transport handshake options.</p>
+<p>Allowed options depend on the transport module.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>An <code>ok</code> tuple is returned containing the socket for the connection by default.</p>
+<p>Depending on configuration, a <code>continue</code> tuple can otherwise be returned when the handshake operation is paused. It contains data provided by the transport that can be used to inform further decisions before resuming the handshake, for example to provide new transport options. The handshake can be resumed using <a href="../ranch.handshake_continue">ranch:handshake_continue(3)</a> or canceled using <a href="../ranch.handshake_cancel">ranch:handshake_cancel(3)</a>.</p>
+<p>This function will trigger an exception when an error occurs.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: The <code>continue</code> tuple can now be returned.
+</li>
+<li><strong>1.6</strong>: Function introduced. Replaces <code>ranch:accept_ack/1</code>.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Initialize the connection process</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">start_link</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>) <font color="#990000">-&gt;</font>
+ <font color="#009900">Pid</font> <font color="#990000">=</font> <b><font color="#000000">proc_lib:spawn_link</font></b>(<b><font color="#000080">?MODULE</font></b>, <font color="#FF6600">init</font>,
+ [<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>]),
+ {<font color="#FF6600">ok</font>, <font color="#009900">Pid</font>}<font color="#990000">.</font>
+
+<b><font color="#000000">init</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>) <font color="#990000">-&gt;</font>
+ {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:handshake</font></b>(<font color="#009900">Ref</font>),
+ <b><font color="#000000">loop</font></b>(<font color="#008080">#state</font>{<font color="#0000FF">ref</font><font color="#990000">=</font><font color="#009900">Ref</font>, <font color="#0000FF">socket</font><font color="#990000">=</font><font color="#009900">Socket</font>,
+ <font color="#0000FF">transport</font><font color="#990000">=</font><font color="#009900">Transport</font>, <font color="#0000FF">opts</font><font color="#990000">=</font><font color="#009900">Opts</font>})<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.start_listener">ranch:start_listener(3)</a>, <a href="../ranch.handshake_continue">ranch:handshake_continue(3)</a>, <a href="../ranch.handshake_cancel">ranch:handshake_cancel(3)</a>, <a href="../ranch.recv_proxy_header">ranch:recv_proxy_header(3)</a>, <a href="../ranch.remove_connection">ranch:remove_connection(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.handshake_cancel/index.html b/docs/en/ranch/2.1/manual/ranch.handshake_cancel/index.html
new file mode 100644
index 00000000..d759ac8a
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.handshake_cancel/index.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:handshake_cancel(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:handshake_cancel(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:handshake_cancel - Cancel the paused transport handshake</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">handshake_cancel</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch:ref</font></b>()) <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font></tt></pre>
+</div></div>
+<p>Cancel the paused transport handshake.</p>
+<p>This function may be called by the protocol process to cancel a paused handshake.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+<p>Allowed options depend on the transport module.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The return value depends on the transport module.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Cancel a paused transport handshake</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">start_link</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>) <font color="#990000">-&gt;</font>
+ <font color="#009900">Pid</font> <font color="#990000">=</font> <b><font color="#000000">proc_lib:spawn_link</font></b>(<b><font color="#000080">?MODULE</font></b>, <font color="#FF6600">init</font>,
+ [<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>]),
+ {<font color="#FF6600">ok</font>, <font color="#009900">Pid</font>}<font color="#990000">.</font>
+
+<b><font color="#000000">init</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>) <font color="#990000">-&gt;</font>
+ {<font color="#FF6600">continue</font>, <font color="#009900">_Info</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:handshake</font></b>(<font color="#009900">Ref</font>),
+ <b><font color="#000000">ranch:handshake_cancel</font></b>(<font color="#009900">Ref</font>),
+ <b><font color="#000080">exit</font></b>(<font color="#FF6600">handshake_cancelled</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.handshake">ranch:handshake(3)</a>, <a href="../ranch.handshake_continue">ranch:handshake_continue(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.handshake_continue/index.html b/docs/en/ranch/2.1/manual/ranch.handshake_continue/index.html
new file mode 100644
index 00000000..58974738
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.handshake_continue/index.html
@@ -0,0 +1,208 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:handshake_continue(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:handshake_continue(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:handshake_continue - Resume the paused transport handshake</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">handshake_continue</font></b>(<font color="#009900">Ref</font>) <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font>}
+<b><font color="#000000">handshake_continue</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Opts</font>) <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font>}
+
+<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch:ref</font></b>()
+<font color="#009900">Opts</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()
+<font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()</tt></pre>
+</div></div>
+<p>Resume the paused transport handshake.</p>
+<p>This function must be called by the protocol process in order to resume a paused handshake.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+<dt>Opts</dt>
+<dd><p>Transport handshake options.</p>
+<p>Allowed options depend on the transport module.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>An <code>ok</code> tuple is returned containing the socket for the connection.</p>
+<p>This function will trigger an exception when an error occurs.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Continue a paused transport handshake</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">start_link</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>) <font color="#990000">-&gt;</font>
+ <font color="#009900">Pid</font> <font color="#990000">=</font> <b><font color="#000000">proc_lib:spawn_link</font></b>(<b><font color="#000080">?MODULE</font></b>, <font color="#FF6600">init</font>,
+ [<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>]),
+ {<font color="#FF6600">ok</font>, <font color="#009900">Pid</font>}<font color="#990000">.</font>
+
+<b><font color="#000000">init</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>) <font color="#990000">-&gt;</font>
+ {<font color="#FF6600">continue</font>, <font color="#009900">_Info</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:handshake</font></b>(<font color="#009900">Ref</font>),
+ {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:handshake_continue</font></b>(<font color="#009900">Ref</font>),
+ <b><font color="#000000">loop</font></b>(<font color="#008080">#state</font>{<font color="#0000FF">ref</font><font color="#990000">=</font><font color="#009900">Ref</font>, <font color="#0000FF">socket</font><font color="#990000">=</font><font color="#009900">Socket</font>,
+ <font color="#0000FF">transport</font><font color="#990000">=</font><font color="#009900">Transport</font>, <font color="#0000FF">opts</font><font color="#990000">=</font><font color="#009900">Opts</font>})<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.handshake">ranch:handshake(3)</a>, <a href="../ranch.handshake_cancel">ranch:handshake_cancel(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.info/index.html b/docs/en/ranch/2.1/manual/ranch.info/index.html
new file mode 100644
index 00000000..96f5b77a
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.info/index.html
@@ -0,0 +1,248 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:info(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:info(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:info - Overview of Ranch listeners</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">info</font></b>() <font color="#990000">-&gt;</font> #{<font color="#009900">Ref</font> <font color="#990000">:=</font> <font color="#009900">Info</font>}
+<b><font color="#000000">info</font></b>(<font color="#009900">Ref</font>) <font color="#990000">-&gt;</font> <font color="#009900">Info</font>
+
+<font color="#009900">Info</font> <font color="#990000">::</font> #{<font color="#009900">Key</font> <font color="#990000">::</font> <b><font color="#000080">atom</font></b>() <font color="#990000">:=</font> <font color="#009900">Value</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()}</tt></pre>
+</div></div>
+<p>Overview of Ranch listeners.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>Returns detailed information about one or all Ranch listeners. The following keys are returned:</p>
+<dl><dt>pid</dt>
+<dd><p>Pid of the listener&apos;s top-level supervisor.</p>
+</dd>
+<dt>status</dt>
+<dd><p>Listener status, either running or suspended.</p>
+</dd>
+<dt>ip</dt>
+<dd><p>Interface Ranch listens on.</p>
+</dd>
+<dt>port</dt>
+<dd><p>Port number Ranch listens on.</p>
+</dd>
+<dt>max_connections</dt>
+<dd><p>Maximum number of connections per connection supervisor.</p>
+</dd>
+<dt>active_connections</dt>
+<dd><p>Number of active connections.</p>
+</dd>
+<dt>all_connections</dt>
+<dd><p>Number of connections, including those removed from the count.</p>
+</dd>
+<dt>transport</dt>
+<dd><p>Transport module.</p>
+</dd>
+<dt>transport_options</dt>
+<dd><p>Transport options.</p>
+</dd>
+<dt>protocol</dt>
+<dd><p>Protocol module.</p>
+</dd>
+<dt>protocol_options</dt>
+<dd><p>Protocol options.</p>
+</dd>
+<dt>metrics</dt>
+<dd><p>Listener metrics.</p>
+</dd>
+</dl>
+<h2 id="_metrics">Metrics</h2>
+<p>Listener metrics are provided as a map, with the following keys:</p>
+<dl><dt>{conns_sup, Index, accept}</dt>
+<dd><p>Number of accepted connections, per connection supervisor.</p>
+</dd>
+<dt>{conns_sup, Index, terminate}</dt>
+<dd><p>Number of terminated connection processes, per connection supervisor.</p>
+</dd>
+</dl>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.1</strong>: Added accept/terminate metrics to the output of <code>ranch:info/0,1</code>.
+</li>
+<li><strong>2.0</strong>: The listener info is now returned as a map.
+</li>
+<li><strong>2.0</strong>: The <code>num_acceptors</code> key has been removed.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Get information about all listeners</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">AllInfo</font> <font color="#990000">=</font> <b><font color="#000000">ranch:info</font></b>()<font color="#990000">.</font></tt></pre>
+</div></div>
+<div class="listingblock"><div class="title">Get information about a specific listener</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">Info</font> <font color="#990000">=</font> <b><font color="#000000">ranch:info</font></b>(<font color="#FF6600">example</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.get_addr">ranch:get_addr(3)</a>, <a href="../ranch.get_port">ranch:get_port(3)</a>, <a href="../ranch.procs">ranch:procs(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.procs/index.html b/docs/en/ranch/2.1/manual/ranch.procs/index.html
new file mode 100644
index 00000000..3e2a35f2
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.procs/index.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:procs(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:procs(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:procs - Retrieve pids from a listener</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">procs</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch:ref</font></b>(),
+ <font color="#009900">Type</font> <font color="#990000">::</font> <font color="#FF6600">acceptors</font> | <font color="#FF6600">connections</font>)
+ <font color="#990000">-&gt;</font> <font color="#009900">Pids</font> <font color="#990000">::</font> [<b><font color="#000080">pid</font></b>()]</tt></pre>
+</div></div>
+<p>Retrieve pids from a listener.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+<dt>Type</dt>
+<dd><p>The type of process that will be returned.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>A list of pids is returned.</p>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Get the pids of the acceptor processes</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">Pids</font> <font color="#990000">=</font> <b><font color="#000000">ranch:procs</font></b>(<font color="#FF6600">acceptors</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<div class="listingblock"><div class="title">Get the pids of the connection processes</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">Pids</font> <font color="#990000">=</font> <b><font color="#000000">ranch:procs</font></b>(<font color="#FF6600">connections</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.get_addr">ranch:get_addr(3)</a>, <a href="../ranch.get_port">ranch:get_port(3)</a>, <a href="../ranch.info">ranch:info(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.recv_proxy_header/index.html b/docs/en/ranch/2.1/manual/ranch.recv_proxy_header/index.html
new file mode 100644
index 00000000..ff86375e
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.recv_proxy_header/index.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:recv_proxy_header(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:recv_proxy_header(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:recv_proxy_header - Receive the PROXY protocol header</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">recv_proxy_header</font></b>(<b><font color="#000000">ranch:ref</font></b>(), <b><font color="#000000">timeout</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <b><font color="#000000">ranch_proxy_header:proxy_info</font></b>()}
+ | {<font color="#FF6600">error</font>, <font color="#009900">Reason</font> <font color="#990000">::</font> <b><font color="#000080">atom</font></b>()}
+ | {<font color="#FF6600">error</font>, <font color="#FF6600">protocol_error</font>, <font color="#009900">HumanReadable</font> <font color="#990000">::</font> <b><font color="#000080">atom</font></b>()}</tt></pre>
+</div></div>
+<p>Receive the PROXY protocol header.</p>
+<p>This function must be called before <code>ranch:handshake/1,2</code> on newly accepted connections to read and parse the PROXY protocol header, if any.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+<dt>Timeout</dt>
+<dd><p>Receive timeout in milliseconds.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>An <code>ok</code> tuple is returned containing PROXY header information on success.</p>
+<p>An <code>error</code> 2-tuple is returned when a socket error occurs.</p>
+<p>An <code>error</code> 3-tuple is returned when a protocol error occurs and Ranch was not able to parse the PROXY header information. The third element contains a human-readable description of the error.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>1.7</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Receive the PROXY protocol header</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">start_link</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>) <font color="#990000">-&gt;</font>
+ <font color="#009900">Pid</font> <font color="#990000">=</font> <b><font color="#000000">proc_lib:spawn_link</font></b>(<b><font color="#000080">?MODULE</font></b>, <font color="#FF6600">init</font>,
+ [<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>]),
+ {<font color="#FF6600">ok</font>, <font color="#009900">Pid</font>}<font color="#990000">.</font>
+
+<b><font color="#000000">init</font></b>(<font color="#009900">Ref</font>, <font color="#009900">Transport</font>, <font color="#009900">Opts</font>) <font color="#990000">-&gt;</font>
+ {<font color="#FF6600">ok</font>, <font color="#009900">ProxyInfo</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:recv_proxy_header</font></b>(<font color="#009900">Ref</font>, <font color="#993399">1000</font>),
+ {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:handshake</font></b>(<font color="#009900">Ref</font>),
+ <b><font color="#000000">loop</font></b>(<font color="#008080">#state</font>{<font color="#0000FF">ref</font><font color="#990000">=</font><font color="#009900">Ref</font>, <font color="#0000FF">socket</font><font color="#990000">=</font><font color="#009900">Socket</font>, <font color="#0000FF">transport</font><font color="#990000">=</font><font color="#009900">Transport</font>,
+ <font color="#0000FF">proxy_info</font><font color="#990000">=</font><font color="#009900">ProxyInfo</font>, <font color="#0000FF">opts</font><font color="#990000">=</font><font color="#009900">Opts</font>})<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.start_listener">ranch:start_listener(3)</a>, <a href="../ranch.handshake">ranch:handshake(3)</a>, <a href="../ranch.remove_connection">ranch:remove_connection(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.remove_connection/index.html b/docs/en/ranch/2.1/manual/ranch.remove_connection/index.html
new file mode 100644
index 00000000..b8ba83c0
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.remove_connection/index.html
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:remove_connection(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:remove_connection(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:remove_connection - Remove connection from the count</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">remove_connection</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch:ref</font></b>()) <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font></tt></pre>
+</div></div>
+<p>Remove connection from the count.</p>
+<p>This connection will no longer be included in the count when limiting the number of connections. This can be useful in a mixed environment where some connections are active and others are passive. Passive connections spend most of their time idling and are not consuming much resources.</p>
+<p>This function may only be called from a connection process.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The atom <code>ok</code> is always returned. It can be safely ignored.</p>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Remove the connection process from the count</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">ranch:remove_connection</font></b>(<font color="#FF6600">example</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.start_listener">ranch:start_listener(3)</a>, <a href="../ranch.handshake">ranch:handshake(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.resume_listener/index.html b/docs/en/ranch/2.1/manual/ranch.resume_listener/index.html
new file mode 100644
index 00000000..e94a7874
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.resume_listener/index.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:resume_listener(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:resume_listener(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:resume_listener - Resume a suspended listener</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">resume_listener</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch_ref</font></b>())
+ <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font> | {<font color="#FF6600">error</font>, <b><font color="#000000">any</font></b>()}</tt></pre>
+</div></div>
+<p>Resume a suspended listener.</p>
+<p>Ranch will start listening for and accepting connections again. The function <a href="../ranch.set_transport_options">ranch:set_transport_options(3)</a> can be used to change the transport options before resuming the listener.</p>
+<p>Nothing is done when the listener is already running.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The atom <code>ok</code> is returned on success.</p>
+<p>An error tuple is returned when the listener could not be restarted.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>1.6</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Resume a listener</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:resume_listener</font></b>(<font color="#FF6600">example</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.start_listener">ranch:start_listener(3)</a>, <a href="../ranch.stop_listener">ranch:stop_listener(3)</a>, <a href="../ranch.suspend_listener">ranch:suspend_listener(3)</a>, <a href="../ranch.get_status">ranch:get_status(3)</a>, <a href="../ranch.set_transport_options">ranch:set_transport_options(3)</a>, <a href="../ranch.wait_for_connections">ranch:wait_for_connections(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.set_max_connections/index.html b/docs/en/ranch/2.1/manual/ranch.set_max_connections/index.html
new file mode 100644
index 00000000..4905c8b7
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.set_max_connections/index.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:set_max_connections(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:set_max_connections(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:set_max_connections - Set the max number of connections per connection supervisor</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">set_max_connections</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch:ref</font></b>(),
+ <font color="#009900">MaxConns</font> <font color="#990000">::</font> <b><font color="#000000">ranch:max_conns</font></b>())
+ <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font></tt></pre>
+</div></div>
+<p>Set the max number of connections per connection supervisor.</p>
+<p>The change will be applied immediately. If the new value is smaller than the previous one, Ranch will wait for the extra connections to terminate and will not accept new connections until the number of connections goes below the limit.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+<dt>MaxConns</dt>
+<dd><p>The new maximum number of connections per connection supervisor.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The atom <code>ok</code> is always returned. It can be safely ignored.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: The maximum number of connections is now per connection supervisor.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Set the max number of connections per connection supervisor</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">ranch:set_max_connections</font></b>(<font color="#FF6600">example</font>, <font color="#993399">10000</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.get_max_connections">ranch:get_max_connections(3)</a>, <a href="../ranch.set_protocol_options">ranch:set_protocol_options(3)</a>, <a href="../ranch.set_transport_options">ranch:set_transport_options(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.set_protocol_options/index.html b/docs/en/ranch/2.1/manual/ranch.set_protocol_options/index.html
new file mode 100644
index 00000000..1391a86b
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.set_protocol_options/index.html
@@ -0,0 +1,200 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:set_protocol_options(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:set_protocol_options(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:set_protocol_options - Set the protocol options</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">set_protocol_options</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch:ref</font></b>(),
+ <font color="#009900">ProtoOpts</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>())
+ <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font></tt></pre>
+</div></div>
+<p>Set the protocol options.</p>
+<p>The change will be applied immediately for all new connections. Old connections will not receive the new options.</p>
+<p>Note that the complete set of protocol options is replaced. To update a subset of the options, it is recommended to get the current protocol options using <a href="../ranch.get_protocol_options">ranch:get_protocol_options(3)</a>, update them and then set them back using this function.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+<dt>ProtoOpts</dt>
+<dd><p>The new protocol options.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The atom <code>ok</code> is always returned. It can be safely ignored.</p>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Set the protocol options</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">ranch:set_protocol_options</font></b>(<font color="#FF6600">example</font>, <font color="#009900">ProtoOpts</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<div class="listingblock"><div class="title">Update some of the protocol options</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">ProtoOpts0</font> <font color="#990000">=</font> <b><font color="#000000">ranch:get_protocol_options</font></b>(<font color="#FF6600">example</font>),
+<font color="#009900">ProtoOpts</font> <font color="#990000">=</font> <font color="#009900">ProtoOpts0</font>#{<font color="#0000FF">request_timeout</font> <font color="#990000">=&gt;</font> <font color="#993399">2000</font>},
+<b><font color="#000000">ranch:set_protocol_options</font></b>(<font color="#FF6600">example</font>, <font color="#009900">ProtoOpts</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.get_protocol_options">ranch:get_protocol_options(3)</a>, <a href="../ranch.set_max_connections">ranch:set_max_connections(3)</a>, <a href="../ranch.set_transport_options">ranch:set_transport_options(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.set_transport_options/index.html b/docs/en/ranch/2.1/manual/ranch.set_transport_options/index.html
new file mode 100644
index 00000000..e614dc57
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.set_transport_options/index.html
@@ -0,0 +1,248 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:set_transport_options(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:set_transport_options(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:set_transport_options - Set the transport options</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">set_transport_options</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch:ref</font></b>(),
+ <font color="#009900">TransOpts</font> <font color="#990000">::</font> <b><font color="#000000">ranch:opts</font></b>())
+ <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font> | {<font color="#FF6600">error</font>, <font color="#009900">Reason</font> <font color="#990000">::</font> <b><font color="#000000">term</font></b>()}</tt></pre>
+</div></div>
+<p>Set the transport options.</p>
+<p>The complete set of transport options is replaced. To update a subset of the transport options, it is recommended to get the current transport options using <a href="../ranch.get_transport_options">ranch:get_transport_options(3)</a>, update them and then set them back using this function.</p>
+<p>Changes to the following options will take effect...</p>
+<ul><li>immediately:
+<ul><li><code>max_connections</code>
+</li>
+<li><code>handshake_timeout</code>
+</li>
+<li><code>shutdown</code>
+</li>
+</ul>
+</li>
+<li>only after the listener has been suspended and resumed:
+<ul><li><code>num_acceptors</code>
+</li>
+<li><code>num_listen_sockets</code>
+</li>
+<li><code>post_listen_callback</code>
+</li>
+<li><code>socket_opts</code>
+</li>
+</ul>
+</li>
+<li>only when the entire listener is restarted:
+<ul><li><code>connection_type</code>
+</li>
+<li><code>num_conns_sups</code>
+</li>
+<li><code>logger</code>
+</li>
+</ul>
+</li>
+</ul>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+<dt>TransOpts</dt>
+<dd><p>The new transport options.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The atom <code>ok</code> is returned on success.</p>
+<p>An error tuple is returned on failure, for example if the given transport options contain invalid values.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: The restriction that the listener must be suspended has been removed.
+</li>
+<li><strong>2.0</strong>: The <code>TransOpts</code> argument must no longer contain Ranch-specific options if given as a list. Use a map.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Set the transport options</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">Ref</font> <font color="#990000">=</font> <font color="#FF6600">example</font>,
+
+<font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:suspend_listener</font></b>(<font color="#009900">Ref</font>),
+<font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:set_transport_options</font></b>(<font color="#009900">Ref</font>, <font color="#009900">TransOpts</font>),
+<font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:resume_listener</font></b>(<font color="#009900">Ref</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<div class="listingblock"><div class="title">Update the listener TCP port within the `socket_opts` transport option</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">Ref</font> <font color="#990000">=</font> <font color="#FF6600">example</font>,
+
+<font color="#009900">TransOpts0</font> <font color="#990000">=</font> <b><font color="#000000">ranch:get_transport_options</font></b>(<font color="#009900">Ref</font>),
+#{<font color="#0000FF">socket_opts</font> <font color="#990000">=</font> <font color="#009900">SocketOpts0</font>} <font color="#990000">=</font> <font color="#009900">TransOpts0</font>,
+<font color="#009900">SocketOpts</font> <font color="#990000">=</font> [{<font color="#FF6600">port</font>, <font color="#993399">12345</font>}|<b><font color="#000000">proplists:delete</font></b>(<font color="#FF6600">port</font>, <font color="#009900">SocketOpts0</font>)],
+<font color="#009900">TransOpts</font> <font color="#990000">=</font> <font color="#009900">TransOpts0</font>#{<font color="#0000FF">socket_opts</font> <font color="#990000">=</font> <font color="#009900">SocketOpts</font>},
+
+<font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:suspend_listener</font></b>(<font color="#009900">Ref</font>),
+<font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:set_transport_options</font></b>(<font color="#009900">Ref</font>, <font color="#009900">TransOpts</font>),
+<font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:resume_listener</font></b>(<font color="#009900">Ref</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.suspend_listener">ranch:suspend_listener(3)</a>, <a href="../ranch.resume_listener">ranch:resume_listener(3)</a>, <a href="../ranch.get_transport_options">ranch:get_transport_options(3)</a>, <a href="../ranch.set_max_connections">ranch:set_max_connections(3)</a>, <a href="../ranch.set_protocol_options">ranch:set_protocol_options(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.start_listener/index.html b/docs/en/ranch/2.1/manual/ranch.start_listener/index.html
new file mode 100644
index 00000000..c36d91e7
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.start_listener/index.html
@@ -0,0 +1,246 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:start_listener(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:start_listener(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:start_listener - Start a listener</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">start_listener</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch_ref</font></b>(),
+ <font color="#009900">Transport</font> <font color="#990000">::</font> <b><font color="#000000">module</font></b>(),
+ <font color="#009900">TransOpts</font> <font color="#990000">::</font> <b><font color="#000000">ranch:opts</font></b>(),
+ <font color="#009900">Protocol</font> <font color="#990000">::</font> <b><font color="#000000">module</font></b>(),
+ <font color="#009900">ProtoOpts</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">ListenerPid</font> <font color="#990000">::</font> <b><font color="#000080">pid</font></b>()}
+ | {<font color="#FF6600">error</font>, <b><font color="#000000">any</font></b>()}</tt></pre>
+</div></div>
+<p>Start a listener.</p>
+<p>A listener is a set of processes that accepts and manages connections using the given transport and protocol modules.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name is used to refer to this listener in future calls, for example when stopping it or when updating the configuration.</p>
+<p>It can be any Erlang term. An atom is generally good enough, for example <code>api</code>, <code>my_app_clear</code> or <code>my_app_tls</code>.</p>
+</dd>
+<dt>Transport</dt>
+<dd><p>The transport module that will be used by Ranch to accept connections and that will be passed to the protocol module along with the socket.</p>
+<p>The interface of the transport module is documented in the <a href="../ranch_transport">ranch_transport(3)</a> manual.</p>
+</dd>
+<dt>TransportOpts</dt>
+<dd><p>Transport options include the Ranch-specific options and the socket options. The listener&apos;s port number must be defined in the socket options.</p>
+<p>Socket options may be given directly if there are no Ranch-specific options.</p>
+<p>The available options for the built-in Ranch transports are documented in the <a href="../ranch_tcp">ranch_tcp(3)</a> and <a href="../ranch_ssl">ranch_ssl(3)</a> manuals.</p>
+</dd>
+<dt>Protocol</dt>
+<dd><p>The protocol module that will be used by Ranch after the connection has been accepted.</p>
+<p>The interface of the protocol module is documented in the <a href="../ranch_protocol">ranch_protocol(3)</a> manual.</p>
+</dd>
+<dt>ProtocolOpts</dt>
+<dd><p>The protocol options given when calling the protocol module. Please consult the documentation of the protocol module you are using for more details.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>An ok tuple is returned on success. It contains the pid of the top-level supervisor for the listener.</p>
+<p>An error tuple is returned on error. The error reason may be any Erlang term.</p>
+<p>A common error is <code>eaddrinuse</code>. It indicates that the port configured for Ranch is already in use.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: The <code>TransOpts</code> argument must no longer contain Ranch-specific options if given as a list. Use a map.
+</li>
+<li><strong>1.4</strong>: The <code>NumAcceptors</code> argument was moved to the transport options.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Start a listener</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt>{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:start_listener</font></b>(<font color="#FF6600">example</font>,
+ <font color="#FF6600">ranch_tcp</font>, [{<font color="#FF6600">port</font>, <font color="#993399">8080</font>}],
+ <font color="#FF6600">cowboy_http2</font>, #{}
+)<font color="#990000">.</font></tt></pre>
+</div></div>
+<div class="listingblock"><div class="title">Start a listener with Ranch-specific options</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt>{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:start_listener</font></b>(<font color="#FF6600">example</font>,
+ <font color="#FF6600">ranch_tcp</font>, #{
+ <font color="#0000FF">num_acceptors</font> <font color="#990000">=&gt;</font> <font color="#993399">75</font>,
+ <font color="#0000FF">socket_opts</font> <font color="#990000">=&gt;</font> [{<font color="#FF6600">port</font>, <font color="#993399">8080</font>}]
+ },
+ <font color="#FF6600">cowboy_http2</font>, #{}
+)<font color="#990000">.</font></tt></pre>
+</div></div>
+<div class="listingblock"><div class="title">Start a listener on a random port</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">Ref</font> <font color="#990000">=</font> <font color="#FF6600">example</font>,
+
+{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">ranch:start_listener</font></b>(<font color="#009900">Ref</font>,
+ <font color="#FF6600">ranch_tcp</font>, #{},
+ <font color="#FF6600">cowboy_http2</font>, #{}
+),
+
+<font color="#009900">Port</font> <font color="#990000">=</font> <b><font color="#000000">ranch:get_port</font></b>(<font color="#009900">Ref</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.stop_listener">ranch:stop_listener(3)</a>, <a href="../ranch.child_spec">ranch:child_spec(3)</a>, <a href="../ranch">ranch(3)</a>, <a href="../ranch_tcp">ranch_tcp(3)</a>, <a href="../ranch_ssl">ranch_ssl(3)</a>, <a href="../ranch_transport">ranch_transport(3)</a>, <a href="../ranch_protocol">ranch_protocol(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.stop_listener/index.html b/docs/en/ranch/2.1/manual/ranch.stop_listener/index.html
new file mode 100644
index 00000000..04f4e62c
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.stop_listener/index.html
@@ -0,0 +1,189 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:stop_listener(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:stop_listener(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:stop_listener - Stop a listener</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">stop_listener</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch_ref</font></b>())
+ <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font> | {<font color="#FF6600">error</font>, <font color="#FF6600">not_found</font>}</tt></pre>
+</div></div>
+<p>Stop a listener.</p>
+<p>The listener is stopped gracefully, first by closing the listening port, then by stopping the connection processes. These processes are stopped according to the <code>shutdown</code> transport option, which may be set to brutally kill all connection processes or give them some time to stop properly.</p>
+<p>In order for the connection processes to exit gracefully, they need to trap exit signals and stop before the configured shutdown timeout. If greater control over the shutdown is required the functions <a href="../ranch.suspend_listener">ranch:suspend_listener(3)</a> and <a href="../ranch.wait_for_connections">ranch:wait_for_connections(3)</a> can be used.</p>
+<p>This function does not return until the listener is completely stopped.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The atom <code>ok</code> is returned on success.</p>
+<p>An error tuple is returned when the listener is not found.</p>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Stop a listener</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:stop_listener</font></b>(<font color="#FF6600">example</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.start_listener">ranch:start_listener(3)</a>, <a href="../ranch.child_spec">ranch:child_spec(3)</a>, <a href="../ranch.suspend_listener">ranch:suspend_listener(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.suspend_listener/index.html b/docs/en/ranch/2.1/manual/ranch.suspend_listener/index.html
new file mode 100644
index 00000000..7f49de7d
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.suspend_listener/index.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:suspend_listener(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:suspend_listener(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:suspend_listener - Suspend a running listener</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">suspend_listener</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch_ref</font></b>())
+ <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font> | {<font color="#FF6600">error</font>, <b><font color="#000000">any</font></b>()}</tt></pre>
+</div></div>
+<p>Suspend a running listener.</p>
+<p>Ranch will stop listening for and accepting connections and the listening socket will be closed. Existing connections will continue undisturbed. The function <a href="../ranch.wait_for_connections">ranch:wait_for_connections(3)</a> can be used to wait for connections to be closed if necessary.</p>
+<p>Some transport options can only be changed when the listener is suspended. Please consult the <a href="../ranch.set_transport_options">ranch:set_transport_options(3)</a> manual for more information.</p>
+<p>Nothing is done when the listener is already suspended.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The atom <code>ok</code> is returned on success.</p>
+<p>An error tuple is returned when the listener could not be suspended.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>1.6</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Suspend a listener</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:suspend_listener</font></b>(<font color="#FF6600">example</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.start_listener">ranch:start_listener(3)</a>, <a href="../ranch.stop_listener">ranch:stop_listener(3)</a>, <a href="../ranch.resume_listener">ranch:resume_listener(3)</a>, <a href="../ranch.get_status">ranch:get_status(3)</a>, <a href="../ranch.set_transport_options">ranch:set_transport_options(3)</a>, <a href="../ranch.wait_for_connections">ranch:wait_for_connections(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch.wait_for_connections/index.html b/docs/en/ranch/2.1/manual/ranch.wait_for_connections/index.html
new file mode 100644
index 00000000..596caa0e
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch.wait_for_connections/index.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch:wait_for_connections(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch:wait_for_connections(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch:wait_for_connections - Wait for a specific number of connections</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">wait_for_connections</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch:ref</font></b>(),
+ <font color="#009900">Operator</font>,
+ <font color="#009900">NumConns</font> <font color="#990000">::</font> <b><font color="#000000">non_neg_integer</font></b>())
+ <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font>
+
+<font color="#009900">Operator</font> <font color="#990000">::</font> <font color="#FF6600">'&gt;'</font> | <font color="#FF6600">'&gt;='</font> | <font color="#FF6600">'=='</font> | <font color="#FF6600">'=&lt;'</font> | <font color="#FF6600">'&lt;'</font></tt></pre>
+</div></div>
+<p>Wait for a specific number of connections.</p>
+<p>This function waits until the number of connections on the given listener becomes higher than, equal to or lower than the given number. It never returns otherwise.</p>
+<p>This function can be used to gracefully shutdown a listener by first suspending the listener and then waiting for connections to terminate before finally stopping the listener.</p>
+<!-- @todo The suspend/wait/stop pattern should be tested.-->
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Ref</dt>
+<dd><p>The listener name.</p>
+</dd>
+<dt>Operator</dt>
+<dd><p>The operator to use for the comparison.</p>
+</dd>
+<dt>NumConns</dt>
+<dd><p>The number of connections to reach.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The atom <code>ok</code> is always returned. It can be safely ignored.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>1.6</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Wait for at least 100 connections</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">ranch:wait_for_connections</font></b>(<font color="#FF6600">example</font>, <font color="#FF6600">'&gt;='</font>, <font color="#993399">100</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<div class="listingblock"><div class="title">Gracefully shutdown a listener</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">Ref</font> <font color="#990000">=</font> <font color="#FF6600">example</font>,
+
+<font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:suspend_listener</font></b>(<font color="#009900">Ref</font>),
+<b><font color="#000000">ranch:wait_for_connections</font></b>(<font color="#009900">Ref</font>, <font color="#FF6600">'=='</font>, <font color="#993399">0</font>),
+<font color="#0000FF">ok</font> <font color="#990000">=</font> <b><font color="#000000">ranch:stop_listener</font></b>(<font color="#009900">Ref</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.stop_listener">ranch:stop_listener(3)</a>, <a href="../ranch.suspend_listener">ranch:suspend_listener(3)</a>, <a href="../ranch.resume_listener">ranch:resume_listener(3)</a>, <a href="../ranch">ranch(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch/index.html b/docs/en/ranch/2.1/manual/ranch/index.html
new file mode 100644
index 00000000..656d8d80
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch/index.html
@@ -0,0 +1,338 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch - Socket acceptor pool</p>
+<h2 id="_description">Description</h2>
+<p>The module <code>ranch</code> provides functions for starting and manipulating Ranch listeners.</p>
+<h2 id="_exports">Exports</h2>
+<p>Start/stop:</p>
+<ul><li><a href="../ranch.start_listener">ranch:start_listener(3)</a> - Start a listener
+</li>
+<li><a href="../ranch.stop_listener">ranch:stop_listener(3)</a> - Stop a listener
+</li>
+<li><a href="../ranch.child_spec">ranch:child_spec(3)</a> - Build child specifications for a new listener
+</li>
+</ul>
+<p>Suspend/resume:</p>
+<ul><li><a href="../ranch.suspend_listener">ranch:suspend_listener(3)</a> - Suspend a running listener
+</li>
+<li><a href="../ranch.resume_listener">ranch:resume_listener(3)</a> - Resume a suspended listener
+</li>
+<li><a href="../ranch.get_status">ranch:get_status(3)</a> - Get a listener&apos;s running state
+</li>
+</ul>
+<p>Connections:</p>
+<ul><li><a href="../ranch.handshake">ranch:handshake(3)</a> - Perform the transport handshake
+</li>
+<li><a href="../ranch.handshake_continue">ranch:handshake_continue(3)</a> - Resume the paused transport handshake
+</li>
+<li><a href="../ranch.handshake_cancel">ranch:handshake_cancel(3)</a> - Cancel the paused transport handshake
+</li>
+<li><a href="../ranch.recv_proxy_header">ranch:recv_proxy_header(3)</a> - Receive the PROXY protocol header
+</li>
+<li><a href="../ranch.remove_connection">ranch:remove_connection(3)</a> - Remove connection from the count
+</li>
+</ul>
+<p>Options:</p>
+<ul><li><a href="../ranch.get_max_connections">ranch:get_max_connections(3)</a> - Get the max number of connections per connection supervisor
+</li>
+<li><a href="../ranch.get_protocol_options">ranch:get_protocol_options(3)</a> - Get the current protocol options
+</li>
+<li><a href="../ranch.get_transport_options">ranch:get_transport_options(3)</a> - Get the current transport options
+</li>
+<li><a href="../ranch.set_max_connections">ranch:set_max_connections(3)</a> - Set the max number of connections per connection supervisor
+</li>
+<li><a href="../ranch.set_protocol_options">ranch:set_protocol_options(3)</a> - Set the protocol options
+</li>
+<li><a href="../ranch.set_transport_options">ranch:set_transport_options(3)</a> - Set the transport options
+</li>
+</ul>
+<p>Introspection:</p>
+<ul><li><a href="../ranch.get_addr">ranch:get_addr(3)</a> - Get the listening address
+</li>
+<li><a href="../ranch.get_port">ranch:get_port(3)</a> - Get the listening port
+</li>
+<li><a href="../ranch.info">ranch:info(3)</a> - Overview of Ranch listeners
+</li>
+<li><a href="../ranch.procs">ranch:procs(3)</a> - Retrieve pids from a listener
+</li>
+<li><a href="../ranch.wait_for_connections">ranch:wait_for_connections(3)</a> - Wait for a specific number of connections
+</li>
+</ul>
+<h2 id="_types">Types</h2>
+<h3 id="_max_conns">max_conns()</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">max_conns</font></b>() <font color="#990000">=</font> <b><font color="#000000">non_neg_integer</font></b>() | <font color="#FF6600">infinity</font></tt></pre>
+</div></div>
+<p>Maximum number of connections allowed per connection supervisor.</p>
+<p>This is a soft limit. The actual number of connections might be slightly above the limit due to concurrency when accepting new connections. Some connections may also be removed from this count explicitly by the user code.</p>
+<h3 id="_opts">opts()</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">opts</font></b>() <font color="#990000">=</font> <b><font color="#000000">any</font></b>() | <b><font color="#000000">transport_opts</font></b>(<b><font color="#000000">any</font></b>())</tt></pre>
+</div></div>
+<p>Transport or socket options.</p>
+<h3 id="_ref">ref()</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">ref</font></b>() <font color="#990000">=</font> <b><font color="#000000">any</font></b>()</tt></pre>
+</div></div>
+<p>Unique name used to refer to a listener.</p>
+<h3 id="_transport_opts_socketopts">transport_opts(SocketOpts)</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">transport_opts</font></b>(<font color="#009900">SocketOpts</font>) <font color="#990000">=</font> #{
+ <font color="#0000FF">alarms</font> <font color="#990000">=&gt;</font> #{
+ <b><font color="#000000">term</font></b>() <font color="#990000">=&gt;</font> #{
+ <font color="#FF6600">type</font> <font color="#990000">:=</font> <font color="#FF6600">num_connections</font>,
+ <font color="#FF6600">treshold</font> <font color="#990000">:=</font> <b><font color="#000000">non_neg_integer</font></b>(),
+ <font color="#FF6600">callback</font> <font color="#990000">:=</font> <b><font color="#0000FF">fun</font></b>((<b><font color="#000000">ref</font></b>(), <b><font color="#000000">term</font></b>(), <b><font color="#000080">pid</font></b>(), [<b><font color="#000080">pid</font></b>()]) <font color="#990000">-&gt;</font> <b><font color="#000000">any</font></b>()),
+ <font color="#0000FF">cooldown</font> <font color="#990000">=&gt;</font> <b><font color="#000000">non_neg_integer</font></b>()
+ }
+ },
+ <font color="#0000FF">connection_type</font> <font color="#990000">=&gt;</font> <font color="#FF6600">worker</font> | <font color="#FF6600">supervisor</font>,
+ <font color="#0000FF">handshake_timeout</font> <font color="#990000">=&gt;</font> <b><font color="#000000">timeout</font></b>(),
+ <font color="#0000FF">max_connections</font> <font color="#990000">=&gt;</font> <b><font color="#000000">max_conns</font></b>(),
+ <font color="#0000FF">logger</font> <font color="#990000">=&gt;</font> <b><font color="#000000">module</font></b>(),
+ <font color="#0000FF">num_acceptors</font> <font color="#990000">=&gt;</font> <b><font color="#000000">pos_integer</font></b>(),
+ <font color="#0000FF">num_conns_sups</font> <font color="#990000">=&gt;</font> <b><font color="#000000">pos_integer</font></b>(),
+ <font color="#0000FF">post_listen_callback</font> <font color="#990000">=&gt;</font> <b><font color="#0000FF">fun</font></b>((<b><font color="#000000">term</font></b>()) <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font> | {<font color="#FF6600">error</font>, <b><font color="#000000">term</font></b>()}),
+ <font color="#000080">shutdown</font> <font color="#990000">=&gt;</font> <b><font color="#000000">timeout</font></b>() | <font color="#FF6600">brutal_kill</font>,
+ <font color="#0000FF">socket_opts</font> <font color="#990000">=&gt;</font> <font color="#009900">SocketOpts</font>
+}</tt></pre>
+</div></div>
+<p>Transport options.</p>
+<p>The transport options are a combination of Ranch-specific options and transport-specific socket options.</p>
+<p>None of the options are required.</p>
+<dl><dt>alarms (#{})</dt>
+<dd><p>Alarms to call a function when the number of connections tracked by one connection supervisor reaches or exceeds a defined treshold.</p>
+<p>The map keys are the alarm names, which can be any <code>term</code>. The associated values are the respective alarm options, again in a map with the following keys:</p>
+<dl><dt>type</dt>
+<dd><p>Must be set to <code>num_connections</code>.</p>
+</dd>
+<dt>treshold</dt>
+<dd><p>Treshold value, which must be a <code>non_neg_integer</code>. When the number of connections tracked by a single connection supervisor reaches or exceeds this value, The alarm will trigger and call the function defined in the <code>callback</code> key (see below).</p>
+</dd>
+<dt>callback</dt>
+<dd><p>The alarm function, which takes the listener name, the alarm name, the pid of the connection supervisor and a list of the pids of all connection processes under that supervisor as arguments. The return value is ignored.</p>
+</dd>
+<dt>cooldown (5000)</dt>
+<dd><p>The minimum time after which the alarm can be triggered again, in milliseconds.</p>
+</dd>
+</dl>
+</dd>
+<dt>connection_type (worker)</dt>
+<dd><p>Type of process that will handle the connection.</p>
+</dd>
+<dt>handshake_timeout (5000)</dt>
+<dd><p>Maximum allowed time for the <code>ranch:handshake/1,2</code> call to finish.</p>
+</dd>
+<dt>logger (logger)</dt>
+<dd><p>The module that will be used to write log messages.</p>
+</dd>
+<dt>max_connections (1024)</dt>
+<dd><p>Maximum number of active connections per connection supervisor. Soft limit. Use <code>infinity</code> to disable the limit entirely.</p>
+</dd>
+<dt>num_acceptors (10)</dt>
+<dd><p>Number of processes that accept connections.</p>
+</dd>
+<dt>num_conns_sups - see below</dt>
+<dd><p>Number of processes that supervise connection processes. If not specified, defaults to be equal to <code>num_acceptors</code>.</p>
+</dd>
+<dt>post_listen_callback (fun(_ListenSock) -&gt; ok end)</dt>
+<dd><p>A function which will be called after a listen socket has been successfully created, with the socket as argument. It can be used to perform any necessary setup steps on the socket.</p>
+<p>If the callback function returns <code>ok</code>, the listener will start accepting connections on the socket. If it returns <code>{error, Reason}</code>, the listener will fail to start.</p>
+</dd>
+<dt>shutdown (5000)</dt>
+<dd><p>Maximum allowed time for children to stop on listener shutdown.</p>
+</dd>
+<dt>socket_opts</dt>
+<dd><p>Socket options to be used by <code>Transport:listen/1</code>. Please refer to the documentation of the transport module you are using for more details.</p>
+</dd>
+</dl>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: The type <code>transport_opts(SocketOpts)</code> was added.
+</li>
+<li><strong>2.0</strong>: The function <code>ranch:accept_ack/1</code> was removed in favor of <a href="../ranch.handshake">ranch:handshake(3)</a>.
+</li>
+<li><strong>2.0</strong>: The option <code>max_connections</code> is now per connection supervisor.
+</li>
+<li><strong>2.0</strong>: The <code>num_conns_sup</code> option was added.
+</li>
+<li><strong>2.0</strong>: The <code>socket</code> option was removed.
+</li>
+<li><strong>2.0</strong>: The <code>logger</code> option is no longer experimental. It now defaults to <code>logger</code> instead of <code>error_logger</code>.
+</li>
+<li><strong>2.0</strong>: The <code>opt()</code> type was removed.
+</li>
+<li><strong>1.6</strong>: The experimental <code>logger</code> option was added.
+</li>
+<li><strong>1.6</strong>: The <code>opt()</code> type was deprecated in favor of the new <code>opts()</code> type.
+</li>
+</ul>
+<h2 id="_see_also">See also</h2>
+<p><a href="..">ranch(7)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/1.5/manual/ranch_app/index.html b/docs/en/ranch/2.1/manual/ranch_app/index.html
index 74797ea0..ea3ec7d8 100644
--- a/docs/en/ranch/1.5/manual/ranch_app/index.html
+++ b/docs/en/ranch/2.1/manual/ranch_app/index.html
@@ -63,16 +63,49 @@
<h1 class="lined-header"><span>ranch(7)</span></h1>
<h2 id="_name">Name</h2>
-<p>ranch - Socket acceptor pool for TCP protocols.</p>
+<p>ranch - Socket acceptor pool for TCP protocols</p>
+<h2 id="_description">Description</h2>
+<p>Ranch is a socket acceptor pool for TCP protocols.</p>
+<p>Ranch manages listeners which are a set of processes that accept and manage connections. The connection&apos;s transport and protocol modules are configured per listener. Listeners can be inspected and reconfigured without interruptions in service.</p>
+<h2 id="_modules">Modules</h2>
+<p>Functions:</p>
+<ul><li><a href="../ranch">ranch(3)</a> - Socket acceptor pool
+</li>
+<li><a href="../ranch_proxy_header">ranch_proxy_header(3)</a> - PROXY protocol
+</li>
+</ul>
+<p>Transports:</p>
+<ul><li><a href="../ranch_ssl">ranch_ssl(3)</a> - SSL transport
+</li>
+<li><a href="../ranch_tcp">ranch_tcp(3)</a> - TCP transport
+</li>
+</ul>
+<p>Behaviors:</p>
+<ul><li><a href="../ranch_protocol">ranch_protocol(3)</a> - Protocol modules
+</li>
+<li><a href="../ranch_transport">ranch_transport(3)</a> - Transport modules
+</li>
+</ul>
<h2 id="_dependencies">Dependencies</h2>
-<p>The <code>ranch</code> application depends on the <code>ssl</code> application to start. It is used for handling secure connections, when the transport is <code>ranch_ssl</code>. It can be disabled if SSL is not used.</p>
+<ul><li>ssl - Secure communication over sockets
+</li>
+</ul>
+<p>All these applications must be started before the <code>ranch</code> application. To start Ranch and all dependencies at once:</p>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt>{<font color="#FF6600">ok</font>, <font color="#990000">_</font>} <font color="#990000">=</font> <b><font color="#000000">application:ensure_all_started</font></b>(<font color="#FF6600">ranch</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
<h2 id="_environment">Environment</h2>
<p>The <code>ranch</code> application defines one application environment configuration parameter.</p>
<dl><dt>profile (false)</dt>
<dd><p>When enabled, Ranch will start <code>eprof</code> profiling automatically.</p>
+<p>You can use the <code>ranch_app:profile_output/0</code> function to stop profiling and output the results to the files <em>procs.profile</em> and <em>total.profile</em>. Do not use in production.</p>
</dd>
</dl>
-<p>You can use the <code>ranch_app:profile_output/0</code> function to stop profiling and output the results to the files <em>procs.profile</em> and <em>total.profile</em>. Do not use in production.</p>
+<h2 id="_see_also">See also</h2>
+<p>ssl(7)</p>
@@ -86,17 +119,17 @@
<h3>
Ranch
- 1.5
+ 2.1
Function Reference
</h3>
<ul>
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
</ul>
@@ -108,6 +141,8 @@
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -116,8 +151,6 @@
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.5/manual/ranch_protocol/index.html b/docs/en/ranch/2.1/manual/ranch_protocol/index.html
index d4ed8a92..8ef9d06f 100644
--- a/docs/en/ranch/1.5/manual/ranch_protocol/index.html
+++ b/docs/en/ranch/2.1/manual/ranch_protocol/index.html
@@ -63,31 +63,34 @@
<h1 class="lined-header"><span>ranch_protocol(3)</span></h1>
<h2 id="_name">Name</h2>
-<p>ranch_protocol - behaviour for protocol modules</p>
+<p>ranch_protocol - Protocol modules</p>
<h2 id="_description">Description</h2>
-<p>The <code>ranch_protocol</code> behaviour defines the interface used by Ranch protocols.</p>
-<h2 id="_types">Types</h2>
-<p>None.</p>
+<p>The module <code>ranch_protocol</code> defines the interface used by Ranch protocols.</p>
<h2 id="_callbacks">Callbacks</h2>
-<h3 id="_start_link_ref__socket__transport__protoopts______ok__pid_______ok__pid____pid">start_link(Ref, Socket, Transport, ProtoOpts) -&gt; {ok, pid()} | {ok, pid(), pid()}</h3>
-<dl><dt>Ref = ranch:ref()</dt>
-<dd><p>Listener name.</p>
-</dd>
-<dt>Socket = any()</dt>
-<dd><p>Socket for this connection.</p>
-</dd>
-<dt>Transport = module()</dt>
-<dd><p>Transport module for this socket.</p>
-</dd>
-<dt>ProtoOpts = any()</dt>
-<dd><p>Protocol options.</p>
-</dd>
-</dl>
-<p>Start a new connection process for the given socket.</p>
+<p>Ranch protocols implement the following interface:</p>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">start_link</font></b>(<font color="#009900">Ref</font> <font color="#990000">::</font> <b><font color="#000000">ranch:ref</font></b>(),
+ <font color="#009900">Transport</font> <font color="#990000">::</font> <b><font color="#000000">module</font></b>(),
+ <font color="#009900">ProtoOpts</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">ConnPid</font> <font color="#990000">::</font> <b><font color="#000080">pid</font></b>()}
+ | {<font color="#FF6600">ok</font>, <font color="#009900">SupPid</font> <font color="#990000">::</font> <b><font color="#000080">pid</font></b>(), <font color="#009900">ConnPid</font> <font color="#990000">::</font> <b><font color="#000080">pid</font></b>()}</tt></pre>
+</div></div>
+<p>Start a new connection process.</p>
<p>The only purpose of this callback is to start a process that will handle the socket. It must spawn the process, link and then return the new pid. This function will always be called from inside a supervisor.</p>
<p>This callback can also return two pids. The first pid is the pid of the process that will be supervised. The second pid is the pid of the process that will receive ownership of the socket. This second process must be a child of the first. This form is only available when <code>connection_type</code> is set to <code>supervisor</code>.</p>
<p>If any other value is returned, the supervisor will close the socket and assume no process has been started.</p>
<p>Do not perform any operations in this callback, as this would block the supervisor responsible for starting connection processes and degrade performance severely.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: The second argument <code>Socket</code> was removed.
+</li>
+<li><strong>1.6</strong>: The second argument <code>Socket</code> was deprecated. Call <a href="../ranch.handshake">ranch:handshake(3)</a> to obtain the socket.
+</li>
+</ul>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch.handshake">ranch:handshake(3)</a>, <a href="..">ranch(7)</a></p>
@@ -101,17 +104,17 @@
<h3>
Ranch
- 1.5
+ 2.1
Function Reference
</h3>
<ul>
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
</ul>
@@ -123,6 +126,8 @@
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -131,8 +136,6 @@
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.1/manual/ranch_proxy_header.header/index.html b/docs/en/ranch/2.1/manual/ranch_proxy_header.header/index.html
new file mode 100644
index 00000000..14a6546f
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch_proxy_header.header/index.html
@@ -0,0 +1,220 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch_proxy_header:header(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch_proxy_header:header(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch_proxy_header:header - Build a PROXY protocol header</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">header</font></b>(<font color="#009900">ProxyInfo</font>) <font color="#990000">-&gt;</font> <b><font color="#000000">header</font></b>(<font color="#009900">ProxyInfo</font>, #{})
+<b><font color="#000000">header</font></b>(<font color="#009900">ProxyInfo</font>, <font color="#009900">BuildOpts</font>) <font color="#990000">-&gt;</font> <b><font color="#000000">iodata</font></b>()
+
+<font color="#009900">ProxyInfo</font> <font color="#990000">::</font> <b><font color="#000000">ranch_proxy_header:proxy_info</font></b>()
+<font color="#009900">BuildOpts</font> <font color="#990000">::</font> #{
+ <font color="#0000FF">checksum</font> <font color="#990000">=&gt;</font> <font color="#FF6600">crc32c</font>,
+ <font color="#0000FF">padding</font> <font color="#990000">=&gt;</font> <b><font color="#000000">pos_integer</font></b>() <i><font color="#9A1900">%% &gt;= 3</font></i>
+}</tt></pre>
+</div></div>
+<p>Build a PROXY protocol header.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>ProxyInfo</dt>
+<dd><p>The proxy information to encode.</p>
+</dd>
+<dt>BuildOpts</dt>
+<dd><p>Options to control whether to add a checksum or padding should be included in the encoded PROXY protocol header.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The PROXY protocol header is returned.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>1.7</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Build a PROXY protocol header</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">ProxyInfo</font> <font color="#990000">=</font> #{
+ <font color="#0000FF">version</font> <font color="#990000">=&gt;</font> <font color="#993399">2</font>,
+ <b><font color="#000080">command</font></b> <font color="#990000">=&gt;</font> <font color="#FF6600">proxy</font>,
+
+ <font color="#0000FF">transport_family</font> <font color="#990000">=&gt;</font> <font color="#FF6600">ipv4</font>,
+ <font color="#0000FF">transport_protocol</font> <font color="#990000">=&gt;</font> <font color="#FF6600">stream</font>,
+
+ <font color="#0000FF">src_address</font> <font color="#990000">=&gt;</font> {<font color="#993399">192</font>, <font color="#993399">168</font>, <font color="#993399">1</font>, <font color="#993399">11</font>},
+ <font color="#0000FF">src_port</font> <font color="#990000">=&gt;</font> <font color="#993399">54321</font>,
+ <font color="#0000FF">dest_address</font> <font color="#990000">=&gt;</font> {<font color="#993399">192</font>, <font color="#993399">168</font>, <font color="#993399">1</font>, <font color="#993399">42</font>},
+ <font color="#0000FF">dest_port</font> <font color="#990000">=&gt;</font> <font color="#993399">443</font>
+},
+<font color="#009900">Data</font> <font color="#990000">=</font> <b><font color="#000000">ranch_proxy_header:parse</font></b>(<font color="#009900">ProxyInfo</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<div class="listingblock"><div class="title">Build a PROXY protocol header with checksum and padding</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">Data</font> <font color="#990000">=</font> <b><font color="#000000">ranch_proxy_header:parse</font></b>(<font color="#009900">ProxyInfo</font>, #{
+ <font color="#0000FF">checksum</font> <font color="#990000">=&gt;</font> <font color="#FF6600">crc32c</font>,
+ <font color="#0000FF">padding</font> <font color="#990000">=&gt;</font> <font color="#993399">7</font>
+})<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch_proxy_header.header">ranch_proxy_header:header(3)</a>, <a href="../ranch_proxy_header">ranch_proxy_header(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch_proxy_header.parse/index.html b/docs/en/ranch/2.1/manual/ranch_proxy_header.parse/index.html
new file mode 100644
index 00000000..4206fead
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch_proxy_header.parse/index.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch_proxy_header:parse(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch_proxy_header:parse(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch_proxy_header:parse - Parse a PROXY protocol header</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">parse</font></b>(<font color="#009900">Data</font> <font color="#990000">::</font> <b><font color="#000080">binary</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <b><font color="#000000">ranch_proxy_header:proxy_info</font></b>(), <font color="#009900">Rest</font> <font color="#990000">::</font> <b><font color="#000080">binary</font></b>()}
+ | {<font color="#FF6600">error</font>, <font color="#009900">HumanReadable</font> <font color="#990000">::</font> <b><font color="#000080">atom</font></b>()}</tt></pre>
+</div></div>
+<p>Parse a PROXY protocol header.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Data</dt>
+<dd><p>The PROXY protocol header optionally followed by more data.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>An <code>ok</code> tuple is returned on success, containing the proxy information found in the header and the rest of the data if more was provided.</p>
+<p>An <code>error</code> tuple is returned when a protocol error is detected. It contains a human readable message about the error.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>1.7</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Parse the PROXY protocol header</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt>{<font color="#FF6600">ok</font> <font color="#009900">ProxyInfo</font>, <font color="#009900">Rest</font>} <font color="#990000">=</font> <b><font color="#000000">ranch_proxy_header:parse</font></b>(<font color="#009900">Data</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch_proxy_header.header">ranch_proxy_header:header(3)</a>, <a href="../ranch_proxy_header.to_connection_info">ranch_proxy_header:to_connection_info(3)</a>, <a href="../ranch_proxy_header">ranch_proxy_header(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch_proxy_header.to_connection_info/index.html b/docs/en/ranch/2.1/manual/ranch_proxy_header.to_connection_info/index.html
new file mode 100644
index 00000000..2515bcae
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch_proxy_header.to_connection_info/index.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch_proxy_header:to_connection_info(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch_proxy_header:to_connection_info(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch_proxy_header:to_connection_info - Convert proxy_info() to ssl:connection_info()</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">to_connection_info</font></b>(<font color="#009900">ProxyInfo</font> <font color="#990000">::</font> <b><font color="#000000">proxy_info</font></b>())
+ <font color="#990000">-&gt;</font> <b><font color="#000000">ssl:connection_info</font></b>()</tt></pre>
+</div></div>
+<p>Convert <code>ranch_proxy_header:proxy_info()</code> information to the <code>ssl:connection_info()</code> format returned by <code>ssl:connection_information/1,2</code>.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>ProxyInfo</dt>
+<dd><p>The PROXY protocol information.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>Connection information is returned as a proplist.</p>
+<p>Because the PROXY protocol header includes limited information, only the keys <code>protocol</code>, <code>selected_cipher_suite</code> and <code>sni_hostname</code> will be returned, at most. All keys are optional.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.1</strong>: Function introduced.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Convert the PROXY protocol information</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#009900">ConnInfo</font> <font color="#990000">=</font> <b><font color="#000000">ranch_proxy_header:to_connection_info</font></b>(<font color="#009900">ProxyInfo</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch_proxy_header.parse">ranch_proxy_header:parse(3)</a>, <a href="../ranch_proxy_header">ranch_proxy_header(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch_proxy_header/index.html b/docs/en/ranch/2.1/manual/ranch_proxy_header/index.html
new file mode 100644
index 00000000..ac7e16c5
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch_proxy_header/index.html
@@ -0,0 +1,276 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch_proxy_header(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch_proxy_header(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch_proxy_header - PROXY protocol</p>
+<h2 id="_description">Description</h2>
+<p>The module <code>ranch_proxy_header</code> provides functions for parsing and building the PROXY protocol header.</p>
+<h2 id="_exports">Exports</h2>
+<ul><li><a href="../ranch_proxy_header.parse">ranch_proxy_header:parse(3)</a> - Parse a PROXY protocol header
+</li>
+<li><a href="../ranch_proxy_header.header">ranch_proxy_header:header(3)</a> - Build a PROXY protocol header
+</li>
+<li><a href="../ranch_proxy_header.to_connection_info">ranch_proxy_header:to_connection_info(3)</a> - Convert proxy_info() to ssl:connection_info()
+</li>
+</ul>
+<h2 id="_types">Types</h2>
+<h3 id="_proxy_info">proxy_info()</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">proxy_info</font></b>() <font color="#990000">=</font> #{
+ <i><font color="#9A1900">%% Mandatory part.</font></i>
+ <font color="#FF6600">version</font> <font color="#990000">:=</font> <font color="#993399">1</font> | <font color="#993399">2</font>,
+ <font color="#FF6600">command</font> <font color="#990000">:=</font> <font color="#FF6600">local</font> | <font color="#FF6600">proxy</font>,
+ <font color="#0000FF">transport_family</font> <font color="#990000">=&gt;</font> <font color="#000080">undefined</font> | <font color="#FF6600">ipv4</font> | <font color="#FF6600">ipv6</font> | <font color="#FF6600">unix</font>,
+ <font color="#0000FF">transport_protocol</font> <font color="#990000">=&gt;</font> <font color="#000080">undefined</font> | <font color="#FF6600">stream</font> | <font color="#FF6600">dgram</font>,
+
+ <i><font color="#9A1900">%% Addresses.</font></i>
+ <font color="#0000FF">src_address</font> <font color="#990000">=&gt;</font> <b><font color="#000000">inet:ip_address</font></b>() | <b><font color="#000080">binary</font></b>(),
+ <font color="#0000FF">src_port</font> <font color="#990000">=&gt;</font> <b><font color="#000000">inet:port_number</font></b>(),
+ <font color="#0000FF">dest_address</font> <font color="#990000">=&gt;</font> <b><font color="#000000">inet:ip_address</font></b>() | <b><font color="#000080">binary</font></b>(),
+ <font color="#0000FF">dest_port</font> <font color="#990000">=&gt;</font> <b><font color="#000000">inet:port_number</font></b>(),
+
+ <i><font color="#9A1900">%% Extra TLV-encoded data.</font></i>
+ <font color="#0000FF">alpn</font> <font color="#990000">=&gt;</font> <b><font color="#000080">binary</font></b>(), <i><font color="#9A1900">%% US-ASCII.</font></i>
+ <font color="#0000FF">authority</font> <font color="#990000">=&gt;</font> <b><font color="#000080">binary</font></b>(), <i><font color="#9A1900">%% UTF-8.</font></i>
+ <font color="#0000FF">netns</font> <font color="#990000">=&gt;</font> <b><font color="#000080">binary</font></b>(), <i><font color="#9A1900">%% US-ASCII.</font></i>
+ <font color="#0000FF">ssl</font> <font color="#990000">=&gt;</font> #{
+ <font color="#FF6600">client</font> <font color="#990000">:=</font> [<font color="#FF6600">ssl</font> | <font color="#FF6600">cert_conn</font> | <font color="#FF6600">cert_sess</font>],
+ <font color="#FF6600">verified</font> <font color="#990000">:=</font> <b><font color="#000000">boolean</font></b>(),
+ <font color="#0000FF">version</font> <font color="#990000">=&gt;</font> <b><font color="#000080">binary</font></b>(), <i><font color="#9A1900">%% US-ASCII.</font></i>
+ <font color="#0000FF">cipher</font> <font color="#990000">=&gt;</font> <b><font color="#000080">binary</font></b>(), <i><font color="#9A1900">%% US-ASCII.</font></i>
+ <font color="#0000FF">sig_alg</font> <font color="#990000">=&gt;</font> <b><font color="#000080">binary</font></b>(), <i><font color="#9A1900">%% US-ASCII.</font></i>
+ <font color="#0000FF">key_alg</font> <font color="#990000">=&gt;</font> <b><font color="#000080">binary</font></b>(), <i><font color="#9A1900">%% US-ASCII.</font></i>
+ <font color="#0000FF">cn</font> <font color="#990000">=&gt;</font> <b><font color="#000080">binary</font></b>() <i><font color="#9A1900">%% UTF-8.</font></i>
+ },
+
+ <i><font color="#9A1900">%% Unknown TLVs can't be parsed so the raw data is given.</font></i>
+ <font color="#0000FF">raw_tlvs</font> <font color="#990000">=&gt;</font> [{<font color="#993399">0</font><font color="#990000">..</font><font color="#993399">255</font>, <b><font color="#000080">binary</font></b>()}]
+}<font color="#990000">.</font></tt></pre>
+</div></div>
+<p>The PROXY protocol information.</p>
+<p>The following fields may be found, although most of them are optional:</p>
+<dl><dt>version</dt>
+<dd><p>The PROXY protocol version used.</p>
+</dd>
+<dt>command</dt>
+<dd><p><code>proxy</code> is used for proxied connections. <code>local</code> for non-proxied connections. Those do not have any additional information.</p>
+</dd>
+<dt>transport_family</dt>
+<dd><p>The transport family of the original connection.</p>
+</dd>
+<dt>transport_protocol</dt>
+<dd><p>The transport protocol of the original connection.</p>
+</dd>
+<dt>src_address</dt>
+<dd><p>The source address of the original connection. This is the original address of the client.</p>
+</dd>
+<dt>src_port</dt>
+<dd><p>The source port of the original connection. This is the port the client opened on its end for the connection. It is not defined for UNIX domain sockets.</p>
+</dd>
+<dt>dest_address</dt>
+<dd><p>The destination address of the original connection.</p>
+</dd>
+<dt>dest_port</dt>
+<dd><p>The destination port of the original connection. It is not defined for UNIX domain sockets.</p>
+</dd>
+<dt>alpn</dt>
+<dd><p>The upper layer protocol in use over the connection. This is typically negotiated via the ALPN extension for TLS.</p>
+</dd>
+<dt>authority</dt>
+<dd><p>The host name serving as authority for the connection. This is typically passed using the SNI extension for TLS.</p>
+</dd>
+<dt>netns</dt>
+<dd><p>The namespace&apos;s name for the original connection.</p>
+</dd>
+<dt>ssl</dt>
+<dd><p>Various information pertaining to the original SSL/TLS connection.</p>
+<dl><dt>client</dt>
+<dd><p>A list containing a number of flags. <code>ssl</code> indicates that the client connected over SSL/TLS. <code>cert_conn</code> indicates that the client provided a certificate over the original connection. <code>cert_sess</code> indicates that the client provided a certificate at least once over the TLS session this connection belongs to.</p>
+</dd>
+<dt>verified</dt>
+<dd><p>Whether the client presented a certificate and it was successfully verified.</p>
+</dd>
+<dt>version</dt>
+<dd><p>The US-ASCII string containing the SSL/TLS version used for the original connection.</p>
+</dd>
+<dt>cipher</dt>
+<dd><p>The US-ASCII string name of the cipher used.</p>
+</dd>
+<dt>sig_alg</dt>
+<dd><p>The US-ASCII string name of the algorithm used to sign the certificate provided by the client.</p>
+</dd>
+<dt>key_alg</dt>
+<dd><p>The US-ASCII string name of the algorithm used to generate the key of the certificate provided by the client.</p>
+</dd>
+<dt>cn</dt>
+<dd><p>The UTF-8 string representation of the Common Name field of the client certificate&apos;s Distinguished Name.</p>
+</dd>
+</dl>
+</dd>
+<dt>raw_tlvs</dt>
+<dd><p>The non-standard TLVs that Ranch was not able to parse.</p>
+</dd>
+</dl>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>1.7</strong>: Module introduced.
+</li>
+</ul>
+<h2 id="_see_also">See also</h2>
+<p><a href="..">ranch(7)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/1.5/manual/ranch_ssl/index.html b/docs/en/ranch/2.1/manual/ranch_ssl/index.html
index 2e732ec8..ca990304 100644
--- a/docs/en/ranch/1.5/manual/ranch_ssl/index.html
+++ b/docs/en/ranch/2.1/manual/ranch_ssl/index.html
@@ -63,63 +63,91 @@
<h1 class="lined-header"><span>ranch_ssl(3)</span></h1>
<h2 id="_name">Name</h2>
-<p>ranch_ssl - SSL transport module</p>
+<p>ranch_ssl - SSL transport</p>
<h2 id="_description">Description</h2>
-<p>The <code>ranch_ssl</code> module implements an SSL Ranch transport.</p>
+<p>The module <code>ranch_ssl</code> implements an SSL Ranch transport.</p>
+<h2 id="_exports">Exports</h2>
+<p>The module <code>ranch_ssl</code> implements the interface defined by <a href="../ranch_transport">ranch_transport(3)</a>.</p>
<h2 id="_types">Types</h2>
+<h3 id="_opt">opt()</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">opt</font></b>() <font color="#990000">::</font> <b><font color="#000000">ranch_tcp:opt</font></b>() | <b><font color="#000000">ssl_opt</font></b>()</tt></pre>
+</div></div>
+<p>Listen options.</p>
+<p>The TCP options are defined in <a href="../ranch_tcp">ranch_tcp(3)</a>.</p>
+<h3 id="_opts">opts()</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">opts</font></b>() <font color="#990000">::</font> [<b><font color="#000000">opt</font></b>()]</tt></pre>
+</div></div>
+<p>List of listen options.</p>
<h3 id="_ssl_opt">ssl_opt()</h3>
<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000000">ssl_opt</font></b>() <font color="#990000">=</font> {<font color="#FF6600">alpn_preferred_protocols</font>, [<b><font color="#000080">binary</font></b>()]}
- | {<font color="#FF6600">beast_mitigation</font>, <font color="#FF6600">one_n_minus_one</font> | <font color="#FF6600">zero_n</font> | <font color="#FF6600">disabled</font>}
- | {<font color="#FF6600">cacertfile</font>, <b><font color="#000000">string</font></b>()}
- | {<font color="#FF6600">cacerts</font>, [<b><font color="#000000">public_key:der_encoded</font></b>()]}
- | {<font color="#FF6600">cert</font>, <b><font color="#000000">public_key:der_encoded</font></b>()}
- | {<font color="#FF6600">certfile</font>, <b><font color="#000000">string</font></b>()}
- | {<font color="#FF6600">ciphers</font>, [<b><font color="#000000">ssl:erl_cipher_suite</font></b>()] | <b><font color="#000000">string</font></b>()}
- | {<font color="#FF6600">client_renegotiation</font>, <b><font color="#000000">boolean</font></b>()}
- | {<font color="#FF6600">crl_cache</font>, {<b><font color="#000000">module</font></b>(), {<font color="#FF6600">internal</font> | <b><font color="#000000">any</font></b>(), <b><font color="#000080">list</font></b>()}}}
- | {<font color="#FF6600">crl_check</font>, <b><font color="#000000">boolean</font></b>() | <font color="#FF6600">peer</font> | <font color="#FF6600">best_effort</font>}
- | {<font color="#FF6600">depth</font>, <font color="#993399">0</font><font color="#990000">..</font><font color="#993399">255</font>}
- | {<font color="#FF6600">dh</font>, <b><font color="#000000">public_key:der_encoded</font></b>()}
- | {<font color="#FF6600">dhfile</font>, <b><font color="#000000">string</font></b>()}
- | {<font color="#FF6600">fail_if_no_peer_cert</font>, <b><font color="#000000">boolean</font></b>()}
- | {<font color="#FF6600">hibernate_after</font>, <b><font color="#000080">integer</font></b>() | <font color="#000080">undefined</font>}
- | {<font color="#FF6600">honor_cipher_order</font>, <b><font color="#000000">boolean</font></b>()}
- | {<font color="#FF6600">key</font>, {<font color="#FF6600">'RSAPrivateKey'</font> | <font color="#FF6600">'DSAPrivateKey'</font> | <font color="#FF6600">'PrivateKeyInfo'</font>, <b><font color="#000000">public_key:der_encoded</font></b>()}}
- | {<font color="#FF6600">keyfile</font>, <b><font color="#000000">string</font></b>()}
- | {<font color="#FF6600">log_alert</font>, <b><font color="#000000">boolean</font></b>()}
- | {<font color="#FF6600">next_protocols_advertised</font>, [<b><font color="#000080">binary</font></b>()]}
- | {<font color="#FF6600">padding_check</font>, <b><font color="#000000">boolean</font></b>()}
- | {<font color="#FF6600">partial_chain</font>, <b><font color="#0000FF">fun</font></b>(([<b><font color="#000000">public_key:der_encoded</font></b>()]) <font color="#990000">-&gt;</font> {<font color="#FF6600">trusted_ca</font>, <b><font color="#000000">public_key:der_encoded</font></b>()} | <font color="#FF6600">unknown_ca</font>)}
- | {<font color="#FF6600">password</font>, <b><font color="#000000">string</font></b>()}
- | {<font color="#FF6600">psk_identity</font>, <b><font color="#000000">string</font></b>()}
- | {<font color="#FF6600">reuse_session</font>, <b><font color="#0000FF">fun</font></b>()}
- | {<font color="#FF6600">reuse_sessions</font>, <b><font color="#000000">boolean</font></b>()}
- | {<font color="#FF6600">secure_renegotiate</font>, <b><font color="#000000">boolean</font></b>()}
- | {<font color="#FF6600">signature_algs</font>, [{<b><font color="#000080">atom</font></b>(), <b><font color="#000080">atom</font></b>()}]}
- | {<font color="#FF6600">sni_fun</font>, <b><font color="#0000FF">fun</font></b>()}
- | {<font color="#FF6600">sni_hosts</font>, [{<b><font color="#000000">string</font></b>(), <b><font color="#000000">ssl_opt</font></b>()}]}
- | {<font color="#FF6600">user_lookup_fun</font>, {<b><font color="#0000FF">fun</font></b>(), <b><font color="#000000">any</font></b>()}}
- | {<font color="#FF6600">v2_hello_compatible</font>, <b><font color="#000000">boolean</font></b>()}
- | {<font color="#FF6600">verify</font>, <b><font color="#000000">ssl:verify_type</font></b>()}
- | {<font color="#FF6600">verify_fun</font>, {<b><font color="#0000FF">fun</font></b>(), <b><font color="#000000">any</font></b>()}}
- | {<font color="#FF6600">versions</font>, [<b><font color="#000080">atom</font></b>()]}<font color="#990000">.</font></tt></pre>
+ | {<font color="#FF6600">anti_replay</font>, <font color="#FF6600">'10k'</font> | <font color="#FF6600">'100k'</font> | {<b><font color="#000080">integer</font></b>(), <b><font color="#000080">integer</font></b>(), <b><font color="#000080">integer</font></b>()}}
+ | {<font color="#FF6600">beast_mitigation</font>, <font color="#FF6600">one_n_minus_one</font> | <font color="#FF6600">zero_n</font> | <font color="#FF6600">disabled</font>}
+ | {<font color="#FF6600">cacertfile</font>, <b><font color="#000000">file:filename</font></b>()}
+ | {<font color="#FF6600">cacerts</font>, [<b><font color="#000000">public_key:der_encoded</font></b>()]}
+ | {<font color="#FF6600">cert</font>, <b><font color="#000000">public_key:der_encoded</font></b>()}
+ | {<font color="#FF6600">certfile</font>, <b><font color="#000000">file:filename</font></b>()}
+ | {<font color="#FF6600">ciphers</font>, <b><font color="#000000">ssl:ciphers</font></b>()}
+ | {<font color="#FF6600">client_renegotiation</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">crl_cache</font>, [<b><font color="#000000">any</font></b>()]}
+ | {<font color="#FF6600">crl_check</font>, <b><font color="#000000">boolean</font></b>() | <font color="#FF6600">peer</font> | <font color="#FF6600">best_effort</font>}
+ | {<font color="#FF6600">depth</font>, <b><font color="#000080">integer</font></b>()}
+ | {<font color="#FF6600">dh</font>, <b><font color="#000080">binary</font></b>()}
+ | {<font color="#FF6600">dhfile</font>, <b><font color="#000000">file:filename</font></b>()}
+ | {<font color="#FF6600">eccs</font>, [<b><font color="#000000">ssl:named_curve</font></b>()]}
+ | {<font color="#FF6600">fail_if_no_peer_cert</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">handshake</font>, <font color="#FF6600">hello</font> | <font color="#FF6600">full</font>}
+ | {<font color="#FF6600">hibernate_after</font>, <b><font color="#000000">timeout</font></b>()}
+ | {<font color="#FF6600">honor_cipher_order</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">honor_ecc_order</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">key</font>, <b><font color="#000000">ssl:key</font></b>()}
+ | {<font color="#FF6600">key_update_at</font>, <b><font color="#000000">pos_integer</font></b>()}
+ | {<font color="#FF6600">keyfile</font>, <b><font color="#000000">file:filename</font></b>()}
+ | {<font color="#FF6600">log_alert</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">log_level</font>, <b><font color="#000000">logger:level</font></b>()}
+ | {<font color="#FF6600">max_handshake_size</font>, <b><font color="#000080">integer</font></b>()}
+ | {<font color="#FF6600">middlebox_comp_mode</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">next_protocols_advertised</font>, [<b><font color="#000080">binary</font></b>()]}
+ | {<font color="#FF6600">padding_check</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">partial_chain</font>, <b><font color="#0000FF">fun</font></b>()}
+ | {<font color="#FF6600">password</font>, <b><font color="#000000">string</font></b>()}
+ | {<font color="#FF6600">protocol</font>, <font color="#FF6600">tls</font> | <font color="#FF6600">dtls</font>}
+ | {<font color="#FF6600">psk_identity</font>, <b><font color="#000000">string</font></b>()}
+ | {<font color="#FF6600">reuse_session</font>, <b><font color="#0000FF">fun</font></b>()}
+ | {<font color="#FF6600">reuse_sessions</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">secure_renegotiate</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">session_tickets</font>, <font color="#FF6600">disabled</font> | <font color="#FF6600">stateful</font> | <font color="#FF6600">stateless</font>}
+ | {<font color="#FF6600">signature_algs</font>, [{<b><font color="#000000">ssl:hash</font></b>(), <b><font color="#000000">ssl:sign_algo</font></b>()}]}
+ | {<font color="#FF6600">signature_algs_cert</font>, [<b><font color="#000000">ssl:sign_scheme</font></b>()]}
+ | {<font color="#FF6600">sni_fun</font>, <b><font color="#0000FF">fun</font></b>()}
+ | {<font color="#FF6600">sni_hosts</font>, [{<b><font color="#000000">string</font></b>(), <b><font color="#000000">ssl_opt</font></b>()}]}
+ | {<font color="#FF6600">supported_groups</font>, [<b><font color="#000000">ssl:group</font></b>()]}
+ | {<font color="#FF6600">user_lookup_fun</font>, {<b><font color="#0000FF">fun</font></b>(), <b><font color="#000000">any</font></b>()}}
+ | {<font color="#FF6600">verify</font>, <font color="#FF6600">verify_none</font> | <font color="#FF6600">verify_peer</font>}
+ | {<font color="#FF6600">verify_fun</font>, {<b><font color="#0000FF">fun</font></b>(), <b><font color="#000000">any</font></b>()}}
+ | {<font color="#FF6600">versions</font>, [<b><font color="#000000">ssl:protocol_version</font></b>()]}</tt></pre>
</div></div>
<p>SSL-specific listen options.</p>
-<h3 id="_opt_____ranch_tcp_opt_____ssl_opt">opt() = ranch_tcp:opt() | ssl_opt()</h3>
-<p>Listen options.</p>
-<h3 id="_opts______opt">opts() = [opt()]</h3>
-<p>List of listen options.</p>
-<h2 id="_option_descriptions">Option descriptions</h2>
-<p>Specifying a certificate is mandatory, either through the <code>cert</code> or the <code>certfile</code> option. None of the other options are required.</p>
-<p>The default value is given next to the option name.</p>
+<p>Specifying a certificate is mandatory, either through the <code>cert</code> or <code>certfile</code> option, or by configuring SNI. None of the other options are required.</p>
+<p>The default value is given next to the option name:</p>
<dl><dt>alpn_preferred_protocols</dt>
<dd><p>Perform Application-Layer Protocol Negotiation with the given list of preferred protocols.</p>
</dd>
-<dt>beast_mitigation</dt>
+<dt>anti_replay</dt>
+<dd><p>Configures the server&apos;s built-in anti replay feature based on Bloom filters.</p>
+</dd>
+<dt>beast_mitigation (one_n_minus_one)</dt>
<dd><p>Change the BEAST mitigation strategy for SSL-3.0 and TLS-1.0 to interoperate with legacy software.</p>
</dd>
<dt>cacertfile</dt>
@@ -155,30 +183,49 @@ http://www.gnu.org/software/src-highlite -->
<dt>dhfile</dt>
<dd><p>Path to the PEM encoded Diffie-Hellman parameters file.</p>
</dd>
+<dt>eccs</dt>
+<dd><p>List of named ECC curves.</p>
+</dd>
<dt>fail_if_no_peer_cert (false)</dt>
<dd><p>Whether to refuse the connection if the client sends an empty certificate.</p>
</dd>
+<dt>handshake (full)</dt>
+<dd><p>If <code>hello</code> is specified for this option, the handshake is paused after receiving the client hello message. The handshake can then be resumed via <code>handshake_continue/3</code>, or cancelled via <code>handshake_cancel/1</code>.</p>
+<p>This option cannot be given to <code>ranch:handshake/1,2</code>.</p>
+</dd>
<dt>hibernate_after (undefined)</dt>
<dd><p>Time in ms after which SSL socket processes go into hibernation to reduce memory usage.</p>
</dd>
<dt>honor_cipher_order (false)</dt>
<dd><p>If true, use the server&apos;s preference for cipher selection. If false, use the client&apos;s preference.</p>
</dd>
+<dt>honor_ecc_order (false)</dt>
+<dd><p>If true, use the server&apos;s preference for ECC curve selection. If false, use the client&apos;s preference.</p>
+</dd>
<dt>key</dt>
<dd><p>DER encoded user private key.</p>
</dd>
+<dt>key_update_at</dt>
+<dd><p>Configures the maximum amount of bytes that can be sent on a TLS 1.3 connection before an automatic key update is performed.</p>
+</dd>
<dt>keyfile</dt>
-<dd><p>Path to the PEM encoded private key file, if different than the certfile.</p>
+<dd><p>Path to the PEM encoded private key file, if different from the certfile.</p>
</dd>
<dt>log_alert (true)</dt>
<dd><p>If false, error reports will not be displayed.</p>
</dd>
+<dt>log_level</dt>
+<dd><p>Specifies the log level for TLS/DTLS.</p>
+</dd>
+<dt>max_handshake_size (256*1024)</dt>
+<dd><p>Used to limit the size of valid TLS handshake packets to avoid DoS attacks.</p>
+</dd>
+<dt>middlebox_comp_mode (true)</dt>
+<dd><p>Configures the middlebox compatibility mode on a TLS 1.3 connection.</p>
+</dd>
<dt>next_protocols_advertised</dt>
<dd><p>List of protocols to send to the client if it supports the Next Protocol extension.</p>
</dd>
-<dt>nodelay (true)</dt>
-<dd><p>Whether to enable TCP_NODELAY.</p>
-</dd>
<dt>padding_check</dt>
<dd><p>Allow disabling the block cipher padding check for TLS-1.0 to be able to interoperate with legacy software.</p>
</dd>
@@ -188,6 +235,9 @@ http://www.gnu.org/software/src-highlite -->
<dt>password</dt>
<dd><p>Password to the private key file, if password protected.</p>
</dd>
+<dt>protocol (tls)</dt>
+<dd><p>Choose TLS or DTLS protocol for the transport layer security.</p>
+</dd>
<dt>psk_identity</dt>
<dd><p>Provide the given PSK identity hint to the client during the handshake.</p>
</dd>
@@ -200,21 +250,27 @@ http://www.gnu.org/software/src-highlite -->
<dt>secure_renegotiate (false)</dt>
<dd><p>Whether to reject renegotiation attempts that do not conform to RFC5746.</p>
</dd>
+<dt>session_tickets</dt>
+<dd><p>Configures the session ticket functionality.</p>
+</dd>
<dt>signature_algs</dt>
<dd><p>The TLS signature algorithm extension may be used, from TLS 1.2, to negotiate which signature algorithm to use during the TLS handshake.</p>
</dd>
+<dt>signature_algs_cert</dt>
+<dd><p>List of signature schemes for the signature_algs_cert extension introduced in TLS 1.3, in order to make special requirements on signatures used in certificates.</p>
+</dd>
<dt>sni_fun</dt>
<dd><p>Function called when the client requests a host using Server Name Indication. Returns options to apply.</p>
</dd>
<dt>sni_hosts</dt>
<dd><p>Options to apply for the host that matches what the client requested with Server Name Indication.</p>
</dd>
+<dt>supported_groups([x25519, x448, secp256r1, secp384r1])</dt>
+<dd><p>TLS 1.3 introduces the <code>supported_groups</code> extension that is used for negotiating the Diffie-Hellman parameters in a TLS 1.3 handshake. Both client and server can specify a list of parameters that they are willing to use.</p>
+</dd>
<dt>user_lookup_fun</dt>
<dd><p>Function called to determine the shared secret when using PSK, or provide parameters when using SRP.</p>
</dd>
-<dt>v2_hello_compatible</dt>
-<dd><p>Accept clients that send hello messages in SSL-2.0 format while offering supported SSL/TLS versions.</p>
-</dd>
<dt>verify (verify_none)</dt>
<dd><p>Use <code>verify_peer</code> to request a certificate from the client.</p>
</dd>
@@ -225,10 +281,14 @@ http://www.gnu.org/software/src-highlite -->
<dd><p>TLS protocol versions that will be supported.</p>
</dd>
</dl>
-<p>Note that the client will not send a certificate unless the value for the <code>verify</code> option is set to <code>verify_peer</code>. This means that the <code>fail_if_no_peer_cert</code> only apply when combined with the <code>verify</code> option. The <code>verify_fun</code> option allows greater control over the client certificate validation.</p>
+<p>Note that the client will not send a certificate unless the value for the <code>verify</code> option is set to <code>verify_peer</code>. This means that <code>fail_if_no_peer_cert</code> only applies when combined with the <code>verify</code> option. The <code>verify_fun</code> option allows greater control over the client certificate validation.</p>
<p>The options <code>sni_fun</code> and <code>sni_hosts</code> are mutually exclusive.</p>
-<h2 id="_exports">Exports</h2>
-<p>None.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: The <code>ssl_opt()</code> type was updated for OTP-23.0.
+</li>
+</ul>
+<h2 id="_see_also">See also</h2>
+<p><a href="..">ranch(7)</a>, <a href="../ranch_transport">ranch_transport(3)</a>, <a href="../ranch_tcp">ranch_tcp(3)</a>, ssl(3)</p>
@@ -242,17 +302,17 @@ http://www.gnu.org/software/src-highlite -->
<h3>
Ranch
- 1.5
+ 2.1
Function Reference
</h3>
<ul>
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
</ul>
@@ -264,6 +324,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -272,8 +334,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/1.5/manual/ranch_tcp/index.html b/docs/en/ranch/2.1/manual/ranch_tcp/index.html
index 6f5113bc..f5bfa2aa 100644
--- a/docs/en/ranch/1.5/manual/ranch_tcp/index.html
+++ b/docs/en/ranch/2.1/manual/ranch_tcp/index.html
@@ -63,10 +63,12 @@
<h1 class="lined-header"><span>ranch_tcp(3)</span></h1>
<h2 id="_name">Name</h2>
-<p>ranch_tcp - TCP transport module</p>
+<p>ranch_tcp - TCP transport</p>
<h2 id="_description">Description</h2>
-<p>The <code>ranch_tcp</code> module implements a TCP Ranch transport.</p>
-<p>Note that due to bugs in OTP up to at least R16B02, it is recommended to disable async threads when using the <code>sendfile</code> function of this transport, as it can make the threads stuck indefinitely.</p>
+<p>The module <code>ranch_tcp</code> implements a TCP Ranch transport.</p>
+<p>The function <code>sendfile</code> may not work correctly when used against files stored in a VirtualBox shared folder.</p>
+<h2 id="_exports">Exports</h2>
+<p>The module <code>ranch_tcp</code> implements the interface defined by <a href="../ranch_transport">ranch_transport(3)</a>.</p>
<h2 id="_types">Types</h2>
<h3 id="_opt">opt()</h3>
<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
@@ -74,38 +76,35 @@ by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000000">opt</font></b>() <font color="#990000">=</font> {<font color="#FF6600">backlog</font>, <b><font color="#000000">non_neg_integer</font></b>()}
- | {<font color="#FF6600">buffer</font>, <b><font color="#000000">non_neg_integer</font></b>()}
- | {<font color="#FF6600">delay_send</font>, <b><font color="#000000">boolean</font></b>()}
- | {<font color="#FF6600">dontroute</font>, <b><font color="#000000">boolean</font></b>()}
- | {<font color="#FF6600">exit_on_close</font>, <b><font color="#000000">boolean</font></b>()}
- | {<font color="#FF6600">fd</font>, <b><font color="#000000">non_neg_integer</font></b>()}
- | {<font color="#FF6600">high_msgq_watermark</font>, <b><font color="#000000">non_neg_integer</font></b>()}
- | {<font color="#FF6600">high_watermark</font>, <b><font color="#000000">non_neg_integer</font></b>()}
- | <font color="#FF6600">inet</font>
- | <font color="#FF6600">inet6</font>
- | {<font color="#FF6600">ip</font>, <b><font color="#000000">inet:ip_address</font></b>()}
- | {<font color="#FF6600">ipv6_v6only</font>, <b><font color="#000000">boolean</font></b>()}
- | {<font color="#FF6600">keepalive</font>, <b><font color="#000000">boolean</font></b>()}
- | {<font color="#FF6600">linger</font>, {<b><font color="#000000">boolean</font></b>(), <b><font color="#000000">non_neg_integer</font></b>()}}
- | {<font color="#FF6600">low_msgq_watermark</font>, <b><font color="#000000">non_neg_integer</font></b>()}
- | {<font color="#FF6600">low_watermark</font>, <b><font color="#000000">non_neg_integer</font></b>()}
- | {<font color="#FF6600">nodelay</font>, <b><font color="#000000">boolean</font></b>()}
- | {<font color="#FF6600">port</font>, <b><font color="#000000">inet:port_number</font></b>()}
- | {<b><font color="#000080">priority</font></b>, <b><font color="#000080">integer</font></b>()}
- | {<font color="#FF6600">raw</font>, <b><font color="#000000">non_neg_integer</font></b>(), <b><font color="#000000">non_neg_integer</font></b>(), <b><font color="#000080">binary</font></b>()}
- | {<font color="#FF6600">recbuf</font>, <b><font color="#000000">non_neg_integer</font></b>()}
- | {<font color="#FF6600">send_timeout</font>, <b><font color="#000000">timeout</font></b>()}
- | {<font color="#FF6600">send_timeout_close</font>, <b><font color="#000000">boolean</font></b>()}
- | {<font color="#FF6600">sndbuf</font>, <b><font color="#000000">non_neg_integer</font></b>()}
- | {<font color="#FF6600">tos</font>, <b><font color="#000080">integer</font></b>()}</tt></pre>
+ | {<font color="#FF6600">buffer</font>, <b><font color="#000000">non_neg_integer</font></b>()}
+ | {<font color="#FF6600">delay_send</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">dontroute</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">exit_on_close</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">fd</font>, <b><font color="#000000">non_neg_integer</font></b>()}
+ | {<font color="#FF6600">high_msgq_watermark</font>, <b><font color="#000000">non_neg_integer</font></b>()}
+ | {<font color="#FF6600">high_watermark</font>, <b><font color="#000000">non_neg_integer</font></b>()}
+ | <font color="#FF6600">inet</font>
+ | <font color="#FF6600">inet6</font>
+ | {<font color="#FF6600">ip</font>, <b><font color="#000000">inet:ip_address</font></b>() | <b><font color="#000000">inet:local_address</font></b>()}
+ | {<font color="#FF6600">ipv6_v6only</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">keepalive</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">linger</font>, {<b><font color="#000000">boolean</font></b>(), <b><font color="#000000">non_neg_integer</font></b>()}}
+ | {<font color="#FF6600">low_msgq_watermark</font>, <b><font color="#000000">non_neg_integer</font></b>()}
+ | {<font color="#FF6600">low_watermark</font>, <b><font color="#000000">non_neg_integer</font></b>()}
+ | {<font color="#FF6600">nodelay</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">port</font>, <b><font color="#000000">inet:port_number</font></b>()}
+ | {<b><font color="#000080">priority</font></b>, <b><font color="#000080">integer</font></b>()}
+ | {<font color="#FF6600">raw</font>, <b><font color="#000000">non_neg_integer</font></b>(), <b><font color="#000000">non_neg_integer</font></b>(), <b><font color="#000080">binary</font></b>()}
+ | {<font color="#FF6600">recbuf</font>, <b><font color="#000000">non_neg_integer</font></b>()}
+ | {<font color="#FF6600">send_timeout</font>, <b><font color="#000000">timeout</font></b>()}
+ | {<font color="#FF6600">send_timeout_close</font>, <b><font color="#000000">boolean</font></b>()}
+ | {<font color="#FF6600">sndbuf</font>, <b><font color="#000000">non_neg_integer</font></b>()}
+ | {<font color="#FF6600">tos</font>, <b><font color="#000080">integer</font></b>()}</tt></pre>
</div></div>
<p>Listen options.</p>
-<p>This does not represent the entirety of the options that can be set on the socket, but only the options that may be set independently of protocol implementation.</p>
-<h3 id="_opts______opt">opts() = [opt()]</h3>
-<p>List of listen options.</p>
-<h2 id="_option_descriptions">Option descriptions</h2>
+<p>Note that additional options may be set by the protocol module using <code>Transport:setopts/2</code>.</p>
<p>None of the options are required.</p>
-<p>Please consult the <code>gen_tcp</code> and <code>inet</code> manuals for a more thorough description of these options. This manual only aims to provide a short description along with what the defaults are. Defaults may be different in Ranch compared to <code>gen_tcp</code>. Defaults are given next to the option name.</p>
+<p>Please consult the <code>gen_tcp</code> and <code>inet</code> manuals for a more thorough description of these options. This manual only aims to provide a short description along with what the defaults are. Defaults may be different in Ranch compared to <code>gen_tcp</code>. Defaults are given next to the option name:</p>
<dl><dt>backlog (1024)</dt>
<dd><p>Max length of the queue of pending connections.</p>
</dd>
@@ -113,7 +112,7 @@ http://www.gnu.org/software/src-highlite -->
<dd><p>Size of the buffer used by the Erlang driver. Default is system-dependent.</p>
</dd>
<dt>delay_send (false)</dt>
-<dd><p>Always queue packets before sending, to send fewer, larger packets over the network.</p>
+<dd><p>Always queue data before sending, to send fewer, larger packets over the network.</p>
</dd>
<dt>dontroute (false)</dt>
<dd><p>Don&apos;t send via a gateway, only send to directly connected hosts.</p>
@@ -125,7 +124,7 @@ http://www.gnu.org/software/src-highlite -->
<dd><p>File descriptor of the socket, if it was opened externally.</p>
</dd>
<dt>high_msgq_watermark (8192)</dt>
-<dd><p>Limit in the amount of data in the socket message queue before the socket queue becomes busy.</p>
+<dd><p>Limit in the amount of data in the socket message queue before the queue becomes busy.</p>
</dd>
<dt>high_watermark (8192)</dt>
<dd><p>Limit in the amount of data in the ERTS socket implementation&apos;s queue before the socket becomes busy.</p>
@@ -137,9 +136,11 @@ http://www.gnu.org/software/src-highlite -->
<dd><p>Set up the socket for IPv6.</p>
</dd>
<dt>ip</dt>
-<dd><p>Interface to listen on. Listen on all interfaces by default.</p>
+<dd><p>Interface to listen on. Listen on all network interfaces by default.</p>
</dd>
-<dt>ipv6_v6only (false)</dt>
+</dl>
+<p>On UNIX systems, it is also possible to use a UNIX Domain socket file by specifying <code>{local, SocketFile}</code>.</p>
+<dl><dt>ipv6_v6only (false)</dt>
<dd><p>Listen on IPv4 and IPv6 (false) or only on IPv6 (true). Use with inet6.</p>
</dd>
<dt>keepalive (false)</dt>
@@ -149,7 +150,7 @@ http://www.gnu.org/software/src-highlite -->
<dd><p>Whether to wait and how long to flush data sent before closing the socket.</p>
</dd>
<dt>low_msgq_watermark (4096)</dt>
-<dd><p>Amount of data in the socket message queue before the socket queue leaves busy state.</p>
+<dd><p>Amount of data in the socket message queue before the queue leaves busy state.</p>
</dd>
<dt>low_watermark (4096)</dt>
<dd><p>Amount of data in the ERTS socket implementation&apos;s queue before the socket leaves busy state.</p>
@@ -161,7 +162,7 @@ http://www.gnu.org/software/src-highlite -->
<dd><p>TCP port number to listen on. 0 means a random port will be used.</p>
</dd>
<dt>priority (0)</dt>
-<dd><p>Priority value for all packets to be sent by this socket.</p>
+<dd><p>Priority value for all packets to be sent on this socket.</p>
</dd>
<dt>recbuf</dt>
<dd><p>Minimum size of the socket&apos;s receive buffer. Default is system-dependent.</p>
@@ -180,8 +181,16 @@ http://www.gnu.org/software/src-highlite -->
</dd>
</dl>
<p>In addition, the <code>raw</code> option can be used to set system-specific options by specifying the protocol level, the option number and the actual option value specified as a binary. This option is not portable. Use with caution.</p>
-<h2 id="_exports">Exports</h2>
-<p>None.</p>
+<h3 id="_opts">opts()</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">opts</font></b>() <font color="#990000">::</font> [<b><font color="#000000">opt</font></b>()]</tt></pre>
+</div></div>
+<p>List of listen options.</p>
+<h2 id="_see_also">See also</h2>
+<p><a href="..">ranch(7)</a>, <a href="../ranch_transport">ranch_transport(3)</a>, <a href="../ranch_ssl">ranch_ssl(3)</a>, gen_tcp(3), inet(3)</p>
@@ -195,17 +204,17 @@ http://www.gnu.org/software/src-highlite -->
<h3>
Ranch
- 1.5
+ 2.1
Function Reference
</h3>
<ul>
- <li><a href="/docs/en/ranch/1.5/guide">User Guide</a></li>
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">Function Reference</a></li>
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
</ul>
@@ -217,6 +226,8 @@ http://www.gnu.org/software/src-highlite -->
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
<li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
<li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
@@ -225,8 +236,6 @@ http://www.gnu.org/software/src-highlite -->
<li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
- <li><a href="/docs/en/ranch/1.5/manual">1.5</a></li>
-
</ul>
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
diff --git a/docs/en/ranch/2.1/manual/ranch_transport.sendfile/index.html b/docs/en/ranch/2.1/manual/ranch_transport.sendfile/index.html
new file mode 100644
index 00000000..3677b19f
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch_transport.sendfile/index.html
@@ -0,0 +1,220 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch_transport:sendfile(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch_transport:sendfile(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch_transport:sendfile - Send a file on the socket</p>
+<h2 id="_description">Description</h2>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">sendfile</font></b>(<font color="#009900">Transport</font> <font color="#990000">::</font> <b><font color="#000000">module</font></b>(),
+ <font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">ranch_transport:socket</font></b>(),
+ <font color="#009900">File</font> <font color="#990000">::</font> <b><font color="#000000">file:name_all</font></b>() | <b><font color="#000000">file:fd</font></b>(),
+ <font color="#009900">Offset</font> <font color="#990000">::</font> <b><font color="#000000">non_neg_integer</font></b>(),
+ <font color="#009900">Bytes</font> <font color="#990000">::</font> <b><font color="#000000">non_neg_integer</font></b>(),
+ <font color="#009900">Opts</font> <font color="#990000">::</font> <b><font color="#000000">ranch_transport:sendfile_opts</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">SentBytes</font> <font color="#990000">::</font> <b><font color="#000000">non_neg_integer</font></b>()} | {<font color="#FF6600">error</font>, <b><font color="#000080">atom</font></b>()}</tt></pre>
+</div></div>
+<p>Send a file on the socket.</p>
+<p>The file may be sent full or in parts, and may be specified by its filename or by an already open file descriptor.</p>
+<p>This function emulates the function <code>file:sendfile/2,4,5</code> and may be used when transports are not manipulating TCP directly.</p>
+<h2 id="_arguments">Arguments</h2>
+<dl><dt>Transport</dt>
+<dd><p>The transport module.</p>
+</dd>
+<dt>Socket</dt>
+<dd><p>The socket.</p>
+</dd>
+<dt>File</dt>
+<dd><p>The filename or file descriptor for the file to be sent.</p>
+</dd>
+<dt>Offset</dt>
+<dd><p>Start position in the file, in bytes.</p>
+</dd>
+<dt>Bytes</dt>
+<dd><p>Length in bytes.</p>
+</dd>
+<dt>Opts</dt>
+<dd><p>Additional options.</p>
+</dd>
+</dl>
+<h2 id="_return_value">Return value</h2>
+<p>The number of bytes actually sent is returned on success inside an <code>ok</code> tuple.</p>
+<p>An <code>error</code> tuple is returned otherwise.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>1.6</strong>: The type of the <code>File</code> argument was extended.
+</li>
+</ul>
+<h2 id="_examples">Examples</h2>
+<div class="listingblock"><div class="title">Implement Transport:sendfile using the fallback</div>
+<div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">sendfile</font></b>(<font color="#009900">Socket</font>, <font color="#009900">Filename</font>) <font color="#990000">-&gt;</font>
+ <b><font color="#000000">sendfile</font></b>(<font color="#009900">Socket</font>, <font color="#009900">Filename</font>, <font color="#993399">0</font>, <font color="#993399">0</font>, [])<font color="#990000">.</font>
+
+<b><font color="#000000">sendfile</font></b>(<font color="#009900">Socket</font>, <font color="#009900">File</font>, <font color="#009900">Offset</font>, <font color="#009900">Bytes</font>) <font color="#990000">-&gt;</font>
+ <b><font color="#000000">sendfile</font></b>(<font color="#009900">Socket</font>, <font color="#009900">File</font>, <font color="#009900">Offset</font>, <font color="#009900">Bytes</font>, [])<font color="#990000">.</font>
+
+<b><font color="#000000">sendfile</font></b>(<font color="#009900">Socket</font>, <font color="#009900">File</font>, <font color="#009900">Offset</font>, <font color="#009900">Bytes</font>, <font color="#009900">Opts</font>) <font color="#990000">-&gt;</font>
+ <b><font color="#000000">ranch_transport:sendfile</font></b>(<b><font color="#000080">?MODULE</font></b>, <font color="#009900">Socket</font>,
+ <font color="#009900">File</font>, <font color="#009900">Offset</font>, <font color="#009900">Bytes</font>, <font color="#009900">Opts</font>)<font color="#990000">.</font></tt></pre>
+</div></div>
+<h2 id="_see_also">See also</h2>
+<p><a href="../ranch_transport">ranch_transport(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/ranch/2.1/manual/ranch_transport/index.html b/docs/en/ranch/2.1/manual/ranch_transport/index.html
new file mode 100644
index 00000000..dea04f2c
--- /dev/null
+++ b/docs/en/ranch/2.1/manual/ranch_transport/index.html
@@ -0,0 +1,427 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <title>Nine Nines: ranch_transport(3)</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=7" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>ranch_transport(3)</span></h1>
+
+<h2 id="_name">Name</h2>
+<p>ranch_transport - Transport modules</p>
+<h2 id="_description">Description</h2>
+<p>The module <code>ranch_transport</code> defines the interface used by Ranch transports.</p>
+<h2 id="_callbacks">Callbacks</h2>
+<p>Ranch transports implement the following interface:</p>
+<h3 id="_accept">accept</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">accept</font></b>(<font color="#009900">LSocket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>(), <font color="#009900">Timeout</font> <font color="#990000">::</font> <b><font color="#000000">timeout</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>()}
+ | {<font color="#FF6600">error</font>, <font color="#FF6600">closed</font> | <font color="#FF6600">timeout</font> | <b><font color="#000080">atom</font></b>()}</tt></pre>
+</div></div>
+<p>Use the listening socket returned by <code>listen/1</code> to accept a new connection. The timeout is specified in milliseconds.</p>
+<h3 id="_close">close</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">close</font></b>(<font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>()) <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font></tt></pre>
+</div></div>
+<p>Close the socket.</p>
+<h3 id="_controlling_process">controlling_process</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">controlling_process</font></b>(<font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>(), <font color="#009900">Pid</font> <font color="#990000">::</font> <b><font color="#000080">pid</font></b>())
+ <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font> | {<font color="#FF6600">error</font>, <font color="#FF6600">closed</font> | <font color="#FF6600">not_owner</font> | <b><font color="#000080">atom</font></b>()}</tt></pre>
+</div></div>
+<p>Assign a new controlling process to the socket. The controlling process is the process that is linked to and receives messages from the socket.</p>
+<h3 id="_getopts">getopts</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">getopts</font></b>(<font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>(), <font color="#009900">SockOpts</font> <font color="#990000">::</font> [<b><font color="#000080">atom</font></b>()])
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <b><font color="#000000">any</font></b>()} | {<font color="#FF6600">error</font>, <b><font color="#000080">atom</font></b>()}</tt></pre>
+</div></div>
+<p>Get one or more options for the socket.</p>
+<h3 id="_getstat">getstat</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">getstat</font></b>(<font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">SockStatValues</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()} | {<font color="#FF6600">error</font>, <b><font color="#000080">atom</font></b>()}</tt></pre>
+</div></div>
+<p>Get all statistics for the socket.</p>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">getstat</font></b>(<font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>(), <font color="#009900">SockStats</font> <font color="#990000">::</font> [<b><font color="#000080">atom</font></b>()])
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">SockStatValues</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()} | {<font color="#FF6600">error</font>, <b><font color="#000080">atom</font></b>()}</tt></pre>
+</div></div>
+<p>Get one or more statistic options for the socket.</p>
+<h3 id="_handshake">handshake</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">handshake</font></b>(<font color="#009900">Socket0</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>(),
+ <font color="#009900">Timeout</font> <font color="#990000">::</font> <b><font color="#000000">timeout</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>()}
+ | {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>(), <font color="#009900">Info</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()}
+ | {<font color="#FF6600">error</font>, <b><font color="#000000">any</font></b>()}
+
+<b><font color="#000000">handshake</font></b>(<font color="#009900">Socket0</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>(),
+ <font color="#009900">SockOpts</font> <font color="#990000">::</font> <b><font color="#000000">opts</font></b>(),
+ <font color="#009900">Timeout</font> <font color="#990000">::</font> <b><font color="#000000">timeout</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>()}
+ | {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>(), <font color="#009900">Info</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()}
+ | {<font color="#FF6600">error</font>, <b><font color="#000000">any</font></b>()}</tt></pre>
+</div></div>
+<p>Perform the transport-level handshake.</p>
+<p>This function will be called by connection processes before performing any socket operation. It allows transports that require extra initialization to perform their task and return a socket that is ready to use.</p>
+<p>If the handshake is completed by this call, the function will return <code>{ok, Socket}</code>. However, some transports (notably, <code>ranch_ssl</code> if <code>{handshake, hello}</code> is specified in the socket options) may pause the handshake at a certain point and return <code>{ok, Socket, Info}</code> instead, in order to allow for additional decisions to be made before resuming the handshake with <code>handshake_continue/3</code> or cancelling it with <code>handshake_cancel/1</code>.</p>
+<p>This function may also be used to upgrade a connection from a transport to another depending on the capabilities of the transports. For example a <code>ranch_tcp</code> socket may be upgraded to a <code>ranch_ssl</code> one using this function.</p>
+<h3 id="_handshake_continue">handshake_continue</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">handshake_continue</font></b>(<font color="#009900">Socket0</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>(),
+ <font color="#009900">Timeout</font> <font color="#990000">::</font> <b><font color="#000000">timeout</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>()}
+ | {<font color="#FF6600">error</font>, <b><font color="#000000">any</font></b>()}
+
+<b><font color="#000000">handshake_continue</font></b>(<font color="#009900">Socket0</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>(),
+ <font color="#009900">SockOpts</font> <font color="#990000">::</font> <b><font color="#000000">opts</font></b>(),
+ <font color="#009900">Timeout</font> <font color="#990000">::</font> <b><font color="#000000">timeout</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>()}
+ | {<font color="#FF6600">error</font>, <b><font color="#000000">any</font></b>()}</tt></pre>
+</div></div>
+<p>Resume the paused transport-level handshake and return a socket that is ready to use.</p>
+<p>This function will be called by connection processes to resume a paused handshake.</p>
+<h3 id="_handshake_cancel">handshake_cancel</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">handshake_cancel</font></b>(<font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>()) <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font></tt></pre>
+</div></div>
+<p>Cancel the paused transport-level handshake.</p>
+<h3 id="_listen">listen</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">listen</font></b>(<font color="#009900">TransportOpts</font> <font color="#990000">::</font> <b><font color="#000000">ranch:transport_opts</font></b>(<b><font color="#000000">any</font></b>()))
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">LSocket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>()} | {<font color="#FF6600">error</font>, <b><font color="#000080">atom</font></b>()}</tt></pre>
+</div></div>
+<p>Create a socket that listens on the port given in the socket options.</p>
+<p>The port may not be specified or may be set to 0, which means a random available port number will be chosen.</p>
+<h3 id="_messages">messages</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">messages</font></b>()
+ <font color="#990000">-&gt;</font> {<font color="#009900">OK</font> <font color="#990000">::</font> <b><font color="#000080">atom</font></b>(),
+ <font color="#009900">Closed</font> <font color="#990000">::</font> <b><font color="#000080">atom</font></b>(),
+ <font color="#009900">Error</font> <font color="#990000">::</font> <b><font color="#000080">atom</font></b>(),
+ <font color="#009900">Passive</font> <font color="#990000">::</font> <b><font color="#000080">atom</font></b>()}</tt></pre>
+</div></div>
+<p>Return the tuple keys for the messages sent by the socket.</p>
+<h3 id="_name">name</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000080">name</font></b>() <font color="#990000">-&gt;</font> <font color="#009900">Name</font> <font color="#990000">::</font> <b><font color="#000080">atom</font></b>()</tt></pre>
+</div></div>
+<p>Return the name of the transport.</p>
+<h3 id="_peername">peername</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">peername</font></b>(<font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, {<b><font color="#000000">inet:ip_address</font></b>(), <b><font color="#000000">inet:port_number</font></b>()}}
+ | {<font color="#FF6600">local</font>, <b><font color="#000080">binary</font></b>()} | {<font color="#FF6600">error</font>, <b><font color="#000080">atom</font></b>()}<font color="#990000">.</font></tt></pre>
+</div></div>
+<p>Return the address and port number for the other end of the connection.</p>
+<p>For UNIX Domain sockets the return value will be <code>{local, PeerSocket}</code>, with <code>PeerSocket</code> typically an empty binary.</p>
+<h3 id="_recv">recv</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">recv</font></b>(<font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>(),
+ <font color="#009900">Length</font> <font color="#990000">::</font> <b><font color="#000000">non_neg_integer</font></b>(),
+ <font color="#009900">Timeout</font> <font color="#990000">::</font> <b><font color="#000000">timeout</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">Packet</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>()}
+ | {<font color="#FF6600">error</font>, <font color="#FF6600">closed</font> | <font color="#FF6600">timeout</font> | <b><font color="#000080">atom</font></b>()}</tt></pre>
+</div></div>
+<p>Receive a packet from the socket in passive mode.</p>
+<p>Attempting to receive data from a socket that is in active mode will return an error.</p>
+<p>A length of 0 will return the data available on the socket as soon as possible, regardless of length.</p>
+<p>While it is possible to use the timeout value <code>infinity</code>, it is highly discouraged as it could cause your process to get stuck waiting for data that will never come. This may happen when a socket becomes half-open due to a crash of the remote endpoint. Wi-Fi going down is another common culprit.</p>
+<h3 id="_secure">secure</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">secure</font></b>() <font color="#990000">-&gt;</font> <b><font color="#000000">boolean</font></b>()</tt></pre>
+</div></div>
+<p>Return whether the transport can be used for secure connections.</p>
+<h3 id="_send">send</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">send</font></b>(<font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>(), <font color="#009900">Packet</font> <font color="#990000">::</font> <b><font color="#000000">iodata</font></b>())
+ <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font> | {<font color="#FF6600">error</font>, <b><font color="#000080">atom</font></b>()}</tt></pre>
+</div></div>
+<p>Send a packet on the socket.</p>
+<h3 id="_sendfile">sendfile</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">sendfile</font></b>(<font color="#009900">Socket</font>, <font color="#009900">File</font>)
+ <font color="#990000">-&gt;</font> <b><font color="#000000">sendfile</font></b>(<font color="#009900">Socket</font>, <font color="#009900">File</font>, <font color="#993399">0</font>, <font color="#993399">0</font>, [])
+
+<b><font color="#000000">sendfile</font></b>(<font color="#009900">Socket</font>, <font color="#009900">File</font>, <font color="#009900">Offset</font>, <font color="#009900">Bytes</font>)
+ <font color="#990000">-&gt;</font> <b><font color="#000000">sendfile</font></b>(<font color="#009900">Socket</font>, <font color="#009900">File</font>, <font color="#009900">Offset</font>, <font color="#009900">Bytes</font>, [])
+
+<b><font color="#000000">sendfile</font></b>(<font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>(),
+ <font color="#009900">File</font> <font color="#990000">::</font> <b><font color="#000000">file:name_all</font></b>() | <b><font color="#000000">file:fd</font></b>(),
+ <font color="#009900">Offset</font> <font color="#990000">::</font> <b><font color="#000000">non_neg_integer</font></b>(),
+ <font color="#009900">Bytes</font> <font color="#990000">::</font> <b><font color="#000000">non_neg_integer</font></b>(),
+ <font color="#009900">Opts</font> <font color="#990000">::</font> <b><font color="#000000">sendfile_opts</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, <font color="#009900">SentBytes</font> <font color="#990000">::</font> <b><font color="#000000">non_neg_integer</font></b>()} | {<font color="#FF6600">error</font>, <b><font color="#000080">atom</font></b>()}</tt></pre>
+</div></div>
+<p>Send a file on the socket.</p>
+<p>The file may be sent full or in parts, and may be specified by its filename or by an already open file descriptor.</p>
+<p>Transports that manipulate TCP directly may use the <code>file:sendfile/2,4,5</code> function, which calls the <code>sendfile</code> syscall where applicable (on Linux, for example). Other transports can use the <code>sendfile/6</code> function exported from this module.</p>
+<h3 id="_setopts">setopts</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">setopts</font></b>(<font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>(), <font color="#009900">SockOpts</font> <font color="#990000">::</font> <b><font color="#000000">any</font></b>())
+ <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font> | {<font color="#FF6600">error</font>, <b><font color="#000080">atom</font></b>()}</tt></pre>
+</div></div>
+<p>Set one or more options for the socket.</p>
+<h3 id="_shutdown">shutdown</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><font color="#000080">shutdown</font>(<font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>(),
+ <font color="#009900">How</font> <font color="#990000">::</font> <font color="#FF6600">read</font> | <font color="#FF6600">write</font> | <font color="#FF6600">read_write</font>)
+ <font color="#990000">-&gt;</font> <font color="#FF6600">ok</font> | {<font color="#FF6600">error</font>, <b><font color="#000080">atom</font></b>()}</tt></pre>
+</div></div>
+<p>Close the socket for reading and/or writing.</p>
+<h3 id="_sockname">sockname</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">sockname</font></b>(<font color="#009900">Socket</font> <font color="#990000">::</font> <b><font color="#000000">socket</font></b>())
+ <font color="#990000">-&gt;</font> {<font color="#FF6600">ok</font>, {<b><font color="#000000">inet:ip_address</font></b>(), <b><font color="#000000">inet:port_number</font></b>()}}
+ | {<font color="#FF6600">error</font>, <b><font color="#000080">atom</font></b>()}<font color="#990000">.</font></tt></pre>
+</div></div>
+<p>Return the address and port number for the local end of the connection.</p>
+<p>For UNIX Domain sockets the return value will be <code>{local, SocketFile}</code>.</p>
+<h2 id="_exports">Exports</h2>
+<p>The following function can be used when implementing transport modules:</p>
+<ul><li><a href="../ranch_transport.sendfile">ranch_transport:sendfile(3)</a> - Send a file on the socket
+</li>
+</ul>
+<h2 id="_types">Types</h2>
+<h3 id="_sendfile_opts">sendfile_opts()</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">sendfile_opts</font></b>() <font color="#990000">::</font> [{<font color="#FF6600">chunk_size</font>, <b><font color="#000000">non_neg_integer</font></b>()}]</tt></pre>
+</div></div>
+<p>Options accepted by the sendfile function and callbacks:</p>
+<dl><dt>chunk_size (8191)</dt>
+<dd><p>The chunk size, in bytes.</p>
+</dd>
+</dl>
+<h3 id="_socket">socket()</h3>
+<div class="listingblock"><div class="content"><!-- Generator: GNU source-highlight 3.1.9
+by Lorenzo Bettini
+http://www.lorenzobettini.it
+http://www.gnu.org/software/src-highlite -->
+<pre><tt><b><font color="#000000">socket</font></b>() <font color="#990000">::</font> <b><font color="#000000">any</font></b>()</tt></pre>
+</div></div>
+<p>The socket.</p>
+<p>The exact type will vary depending on the transport module.</p>
+<h2 id="_changelog">Changelog</h2>
+<ul><li><strong>2.0</strong>: The callback <code>listen/1</code> has changed to accept a map of transport options instead of socket options.
+</li>
+<li><strong>2.0</strong>: The callback <code>messages/0</code> return value was updated to include the passive message for <code>{active, N}</code>.
+</li>
+<li><strong>1.6</strong>: The <code>socket()</code> type was added for documentation purposes.
+</li>
+<li><strong>1.6</strong>: The type of the sendfile filename was extended.
+</li>
+</ul>
+<h2 id="_see_also">See also</h2>
+<p><a href="..">ranch(7)</a>, <a href="../ranch_tcp">ranch_tcp(3)</a>, <a href="../ranch_ssl">ranch_ssl(3)</a></p>
+
+
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Ranch
+ 2.1
+ Function Reference
+
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/ranch/2.1/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">2.1</a></li>
+
+ <li><a href="/docs/en/ranch/2.0/manual">2.0</a></li>
+
+ <li><a href="/docs/en/ranch/1.8/manual">1.8</a></li>
+
+ <li><a href="/docs/en/ranch/1.7/manual">1.7</a></li>
+
+ <li><a href="/docs/en/ranch/1.6/manual">1.6</a></li>
+
+</ul>
+
+<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
+<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
+<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
+<input type="hidden" name="cmd" value="_donations">
+<input type="hidden" name="business" value="[email protected]">
+<input type="hidden" name="lc" value="FR">
+<input type="hidden" name="item_name" value="Loic Hoguin">
+<input type="hidden" name="item_number" value="99s">
+<input type="hidden" name="currency_code" value="EUR">
+<input type="hidden" name="bn" value="PP-DonationsBF:btn_donate_LG.gif:NonHosted">
+<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+<img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
+</form><p>Recurring payment options are also available via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.</p>
+
+
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2018</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/index.html b/docs/index.html
index dbaf9dce..b9e53b8f 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -196,6 +196,13 @@
<ul>
+ <li><a href="/docs/en/ranch/2.1/guide">Ranch 2.1 User Guide</a></li>
+
+
+ <li><a href="/docs/en/ranch/2.1/manual">Ranch 2.1 Function Reference</a></li>
+
+
+
<li><a href="/docs/en/ranch/2.0/guide">Ranch 2.0 User Guide</a></li>
@@ -223,13 +230,6 @@
<li><a href="/docs/en/ranch/1.6/manual">Ranch 1.6 Function Reference</a></li>
-
- <li><a href="/docs/en/ranch/1.5/guide">Ranch 1.5 User Guide</a></li>
-
-
- <li><a href="/docs/en/ranch/1.5/manual">Ranch 1.5 Function Reference</a></li>
-
-
</ul>
diff --git a/docs/index.xml b/docs/index.xml
index a728cc0f..1cd6902c 100644
--- a/docs/index.xml
+++ b/docs/index.xml
@@ -87,10 +87,10 @@ Copyright (c) 2013-2020, Loïc Hoguin &amp;lt;[email protected]&amp;gt; Permiss
<item>
<title>Introduction</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/introduction/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.6/guide/introduction/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/introduction/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.6/guide/introduction/</guid>
<description>Ranch is a socket acceptor pool for TCP protocols.
Ranch aims to provide everything you need to accept TCP connections with a small code base and low latency while being easy to use directly as an application or to embed into your own.
Prerequisites It is assumed the developer already knows Erlang and has some experience with socket programming and TCP protocols.
@@ -99,10 +99,10 @@ Supported platforms Ranch is tested and supported on Linux, FreeBSD, OSX and Win
<item>
<title>Introduction</title>
- <link>https://ninenines.eu/docs/en/ranch/1.6/guide/introduction/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.7/guide/introduction/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.6/guide/introduction/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.7/guide/introduction/</guid>
<description>Ranch is a socket acceptor pool for TCP protocols.
Ranch aims to provide everything you need to accept TCP connections with a small code base and low latency while being easy to use directly as an application or to embed into your own.
Prerequisites It is assumed the developer already knows Erlang and has some experience with socket programming and TCP protocols.
@@ -111,10 +111,10 @@ Supported platforms Ranch is tested and supported on Linux, FreeBSD, OSX and Win
<item>
<title>Introduction</title>
- <link>https://ninenines.eu/docs/en/ranch/1.7/guide/introduction/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.8/guide/introduction/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.7/guide/introduction/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.8/guide/introduction/</guid>
<description>Ranch is a socket acceptor pool for TCP protocols.
Ranch aims to provide everything you need to accept TCP connections with a small code base and low latency while being easy to use directly as an application or to embed into your own.
Prerequisites It is assumed the developer already knows Erlang and has some experience with socket programming and TCP protocols.
@@ -123,22 +123,22 @@ Supported platforms Ranch is tested and supported on Linux, FreeBSD, OSX and Win
<item>
<title>Introduction</title>
- <link>https://ninenines.eu/docs/en/ranch/1.8/guide/introduction/</link>
+ <link>https://ninenines.eu/docs/en/ranch/2.0/guide/introduction/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.8/guide/introduction/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/2.0/guide/introduction/</guid>
<description>Ranch is a socket acceptor pool for TCP protocols.
Ranch aims to provide everything you need to accept TCP connections with a small code base and low latency while being easy to use directly as an application or to embed into your own.
Prerequisites It is assumed the developer already knows Erlang and has some experience with socket programming and TCP protocols.
-Supported platforms Ranch is tested and supported on Linux, FreeBSD, OSX and Windows.</description>
+Supported platforms Ranch is tested and supported on Linux, FreeBSD, macOS and Windows.</description>
</item>
<item>
<title>Introduction</title>
- <link>https://ninenines.eu/docs/en/ranch/2.0/guide/introduction/</link>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/introduction/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/2.0/guide/introduction/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/introduction/</guid>
<description>Ranch is a socket acceptor pool for TCP protocols.
Ranch aims to provide everything you need to accept TCP connections with a small code base and low latency while being easy to use directly as an application or to embed into your own.
Prerequisites It is assumed the developer already knows Erlang and has some experience with socket programming and TCP protocols.
@@ -273,16 +273,6 @@ The Web is concurrent When you access a website there is little concurrency invo
<item>
<title>Listeners</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/listeners/</link>
- <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
-
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/listeners/</guid>
- <description>A listener is a set of processes whose role is to listen on a port for new connections. It manages a pool of acceptor processes, each of them indefinitely accepting connections. When it does, it starts a new process executing the protocol handler code. All the socket programming is abstracted through the use of transport handlers.
-The listener takes care of supervising all the acceptor and connection processes, allowing developers to focus on building their application.</description>
- </item>
-
- <item>
- <title>Listeners</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/guide/listeners/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -322,6 +312,16 @@ The listener takes care of supervising all the acceptor and connection processes
</item>
<item>
+ <title>Listeners</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/listeners/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/listeners/</guid>
+ <description>A listener is a set of processes whose role is to listen on a port for new connections. It manages a pool of acceptor processes, each of them indefinitely accepting connections. When it does, it starts a new process executing the protocol handler code. All the socket programming is abstracted through the use of transport handlers.
+The listener takes care of supervising all the acceptor and connection processes, allowing developers to focus on building their application.</description>
+ </item>
+
+ <item>
<title>Starting and stopping</title>
<link>https://ninenines.eu/docs/en/gun/1.0/guide/start/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -515,10 +515,10 @@ Cowboy is a high quality project. It has a small code base, is very efficient (b
<item>
<title>Transports</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/transports/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.6/guide/transports/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/transports/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.6/guide/transports/</guid>
<description>A transport defines the interface to interact with a socket.
Transports can be used for connecting, listening and accepting connections, but also for receiving and sending data. Both passive and active mode are supported, although all sockets are initialized as passive.
TCP transport The TCP transport is a thin wrapper around gen_tcp.
@@ -528,10 +528,10 @@ Ranch depends on ssl by default so any necessary dependencies will start when Ra
<item>
<title>Transports</title>
- <link>https://ninenines.eu/docs/en/ranch/1.6/guide/transports/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.7/guide/transports/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.6/guide/transports/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.7/guide/transports/</guid>
<description>A transport defines the interface to interact with a socket.
Transports can be used for connecting, listening and accepting connections, but also for receiving and sending data. Both passive and active mode are supported, although all sockets are initialized as passive.
TCP transport The TCP transport is a thin wrapper around gen_tcp.
@@ -541,10 +541,10 @@ Ranch depends on ssl by default so any necessary dependencies will start when Ra
<item>
<title>Transports</title>
- <link>https://ninenines.eu/docs/en/ranch/1.7/guide/transports/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.8/guide/transports/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.7/guide/transports/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.8/guide/transports/</guid>
<description>A transport defines the interface to interact with a socket.
Transports can be used for connecting, listening and accepting connections, but also for receiving and sending data. Both passive and active mode are supported, although all sockets are initialized as passive.
TCP transport The TCP transport is a thin wrapper around gen_tcp.
@@ -554,10 +554,10 @@ Ranch depends on ssl by default so any necessary dependencies will start when Ra
<item>
<title>Transports</title>
- <link>https://ninenines.eu/docs/en/ranch/1.8/guide/transports/</link>
+ <link>https://ninenines.eu/docs/en/ranch/2.0/guide/transports/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.8/guide/transports/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/2.0/guide/transports/</guid>
<description>A transport defines the interface to interact with a socket.
Transports can be used for connecting, listening and accepting connections, but also for receiving and sending data. Both passive and active mode are supported, although all sockets are initialized as passive.
TCP transport The TCP transport is a thin wrapper around gen_tcp.
@@ -567,10 +567,10 @@ Ranch depends on ssl by default so any necessary dependencies will start when Ra
<item>
<title>Transports</title>
- <link>https://ninenines.eu/docs/en/ranch/2.0/guide/transports/</link>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/transports/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/2.0/guide/transports/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/transports/</guid>
<description>A transport defines the interface to interact with a socket.
Transports can be used for connecting, listening and accepting connections, but also for receiving and sending data. Both passive and active mode are supported, although all sockets are initialized as passive.
TCP transport The TCP transport is a thin wrapper around gen_tcp.
@@ -635,16 +635,6 @@ A Gun connection is an Erlang process that manages a socket to a remote endpoint
<item>
<title>Protocols</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/protocols/</link>
- <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
-
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/protocols/</guid>
- <description>A protocol handler starts a connection process and defines the protocol logic executed in this process.
-Writing a protocol handler All protocol handlers must implement the ranch_protocol behavior which defines a single callback, start_link/4. This callback is responsible for spawning a new process for handling the connection. It receives four arguments: the name of the listener, the socket, the transport handler being used and the protocol options defined in the call to ranch:start_listener/5.</description>
- </item>
-
- <item>
- <title>Protocols</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/guide/protocols/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -684,6 +674,16 @@ Writing a protocol handler All protocol handlers must implement the ranch_protoc
</item>
<item>
+ <title>Protocols</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/protocols/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/protocols/</guid>
+ <description>A protocol handler starts a connection process and defines the protocol logic executed in this process.
+Writing a protocol handler All protocol handlers must implement the ranch_protocol behavior which defines a single callback, start_link/3. This callback is responsible for spawning a new process for handling the connection. It receives three arguments: the name of the listener, the transport handler being used and the protocol options defined in the call to ranch:start_listener/5.</description>
+ </item>
+
+ <item>
<title>Getting started</title>
<link>https://ninenines.eu/docs/en/cowboy/2.4/guide/getting_started/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -805,16 +805,6 @@ Streams can be canceled at any time.</description>
<item>
<title>Embedded mode</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/embedded/</link>
- <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
-
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/embedded/</guid>
- <description>Embedded mode allows you to insert Ranch listeners directly in your supervision tree. This allows for greater fault tolerance control by permitting the shutdown of a listener due to the failure of another part of the application and vice versa.
-Embedding To embed Ranch in your application you can simply add the child specs to your supervision tree. This can all be done in the init/1 function of one of your application supervisors.</description>
- </item>
-
- <item>
- <title>Embedded mode</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/guide/embedded/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -854,6 +844,16 @@ However, just as for non-embedded listeners that were started via ranch:start_li
</item>
<item>
+ <title>Embedded mode</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/embedded/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/embedded/</guid>
+ <description>Embedded mode allows you to insert Ranch listeners directly in your supervision tree. This allows for greater fault tolerance control by permitting the shutdown of a listener due to the failure of another part of the application and vice versa.
+However, just as for non-embedded listeners that were started via ranch:start_listener/5, it is required that the ranch application is running before you can start embedded listeners. Furthermore, this also means that embedded listeners will restart when ranch_sup fails.</description>
+ </item>
+
+ <item>
<title>Flow diagram</title>
<link>https://ninenines.eu/docs/en/cowboy/2.4/guide/flow_diagram/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -982,10 +982,10 @@ You must use the gun:ws_upgrade/2,3,4 function to upgrade to Websocket.</descrip
<item>
<title>Writing parsers</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/parsers/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.6/guide/parsers/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/parsers/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.6/guide/parsers/</guid>
<description>There are three kinds of protocols:
Text protocols Schema-less binary protocols Schema-based binary protocols This chapter introduces the first two kinds. It will not cover more advanced topics such as continuations or parser generators.
This chapter isn&amp;apos;t specifically about Ranch, we assume here that you know how to read data from the socket. The data you read and the data that hasn&amp;apos;t been parsed is saved in a buffer.</description>
@@ -993,10 +993,10 @@ This chapter isn&amp;apos;t specifically about Ranch, we assume here that you kn
<item>
<title>Writing parsers</title>
- <link>https://ninenines.eu/docs/en/ranch/1.6/guide/parsers/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.7/guide/parsers/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.6/guide/parsers/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.7/guide/parsers/</guid>
<description>There are three kinds of protocols:
Text protocols Schema-less binary protocols Schema-based binary protocols This chapter introduces the first two kinds. It will not cover more advanced topics such as continuations or parser generators.
This chapter isn&amp;apos;t specifically about Ranch, we assume here that you know how to read data from the socket. The data you read and the data that hasn&amp;apos;t been parsed is saved in a buffer.</description>
@@ -1004,10 +1004,10 @@ This chapter isn&amp;apos;t specifically about Ranch, we assume here that you kn
<item>
<title>Writing parsers</title>
- <link>https://ninenines.eu/docs/en/ranch/1.7/guide/parsers/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.8/guide/parsers/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.7/guide/parsers/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.8/guide/parsers/</guid>
<description>There are three kinds of protocols:
Text protocols Schema-less binary protocols Schema-based binary protocols This chapter introduces the first two kinds. It will not cover more advanced topics such as continuations or parser generators.
This chapter isn&amp;apos;t specifically about Ranch, we assume here that you know how to read data from the socket. The data you read and the data that hasn&amp;apos;t been parsed is saved in a buffer.</description>
@@ -1015,10 +1015,10 @@ This chapter isn&amp;apos;t specifically about Ranch, we assume here that you kn
<item>
<title>Writing parsers</title>
- <link>https://ninenines.eu/docs/en/ranch/1.8/guide/parsers/</link>
+ <link>https://ninenines.eu/docs/en/ranch/2.0/guide/parsers/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.8/guide/parsers/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/2.0/guide/parsers/</guid>
<description>There are three kinds of protocols:
Text protocols Schema-less binary protocols Schema-based binary protocols This chapter introduces the first two kinds. It will not cover more advanced topics such as continuations or parser generators.
This chapter isn&amp;apos;t specifically about Ranch, we assume here that you know how to read data from the socket. The data you read and the data that hasn&amp;apos;t been parsed is saved in a buffer.</description>
@@ -1026,10 +1026,10 @@ This chapter isn&amp;apos;t specifically about Ranch, we assume here that you kn
<item>
<title>Writing parsers</title>
- <link>https://ninenines.eu/docs/en/ranch/2.0/guide/parsers/</link>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/parsers/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/2.0/guide/parsers/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/parsers/</guid>
<description>There are three kinds of protocols:
Text protocols Schema-less binary protocols Schema-based binary protocols This chapter introduces the first two kinds. It will not cover more advanced topics such as continuations or parser generators.
This chapter isn&amp;apos;t specifically about Ranch, we assume here that you know how to read data from the socket. The data you read and the data that hasn&amp;apos;t been parsed is saved in a buffer.</description>
@@ -1144,16 +1144,6 @@ Cowboy provides two types of listeners: one listening for clear TCP connections,
<item>
<title>SSL client authentication</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/ssl_auth/</link>
- <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
-
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/ssl_auth/</guid>
- <description>Purpose SSL client authentication is a mechanism allowing applications to identify certificates. This allows your application to make sure that the client is an authorized certificate, but makes no claim about whether the user can be trusted. This can be combined with a password based authentication to attain greater security.
-The server only needs to retain the certificate serial number and the certificate issuer to authenticate the certificate. Together, they can be used to uniquely identify a certicate.</description>
- </item>
-
- <item>
- <title>SSL client authentication</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/guide/ssl_auth/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -1193,6 +1183,16 @@ The server only needs to retain the certificate serial number and the certificat
</item>
<item>
+ <title>SSL client authentication</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/ssl_auth/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/ssl_auth/</guid>
+ <description>Purpose SSL client authentication is a mechanism allowing applications to identify certificates. This allows your application to make sure that the client is an authorized certificate, but makes no claim about whether the user can be trusted. This can be combined with a password based authentication to attain greater security.
+The server only needs to retain the certificate serial number and the certificate issuer to authenticate the certificate. Together, they can be used to uniquely identify a certificate.</description>
+ </item>
+
+ <item>
<title>Routing</title>
<link>https://ninenines.eu/docs/en/cowboy/2.4/guide/routing/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -1275,13 +1275,13 @@ For this purpose, you should first suspend the listener you wish to stop gracefu
</item>
<item>
- <title>Internals</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/internals/</link>
+ <title>Connection draining</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/connection_draining/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/internals/</guid>
- <description>This chapter may not apply to embedded Ranch as embedding allows you to use an architecture specific to your application, which may or may not be compatible with the description of the Ranch application.
-Note that for everything related to efficiency and performance, you should perform the benchmarks yourself to get the numbers that matter to you. Generic benchmarks found on the web may or may not be of use to you, you can never know until you benchmark your own system.</description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/connection_draining/</guid>
+ <description>Stopping a Ranch listener via ranch:stop_listener/1 will invariably kill all connection processes the listener hosts. However, you may want to stop a listener in a graceful fashion, ie by not accepting any new connections, but allowing the existing connection processes to exit by themselves instead of being killed.
+For this purpose, you should first suspend the listener you wish to stop gracefully, and then wait for its connection count to drop to zero.</description>
</item>
<item>
@@ -1457,6 +1457,16 @@ Note that for everything related to efficiency and performance, you should perfo
</item>
<item>
+ <title>Internals</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/internals/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/internals/</guid>
+ <description>This chapter may not apply to embedded Ranch as embedding allows you to use an architecture specific to your application, which may or may not be compatible with the description of the Ranch application.
+Note that for everything related to efficiency and performance, you should perform the benchmarks yourself to get the numbers that matter to you. Generic benchmarks found on the web may or may not be of use to you, you can never know until you benchmark your own system.</description>
+ </item>
+
+ <item>
<title>Migrating from Gun 1.1 to 1.2</title>
<link>https://ninenines.eu/docs/en/gun/1.3/guide/migrating_from_1.1/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -1565,6 +1575,18 @@ Ranch 1.x had a bottleneck because it used only a single connection supervisor.
</item>
<item>
+ <title>Migrating from Ranch 2.0 to Ranch 2.1</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_2.0/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_2.0/</guid>
+ <description>Ranch 2.1 adds counters and alarms.
+The Prometheus collector was updated to include accepted/terminated connections metrics.
+Ranch 2.1 is compatible with Erlang/OTP 22.0 onward. Support for Erlang/OTP 21 has been removed.
+Features added Metrics are now provided by ranch:info/0,1. Currently includes accepted/terminated connection counts per connection supervisor. Alarms can now be configured. The only alarm currently available is num_connections. When the number of connections goes over a configurable treshold Ranch will call the given callback.</description>
+ </item>
+
+ <item>
<title>Changes since Ranch 1.6</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/guide/migrating_from_1.6/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -1755,6 +1777,16 @@ While a third-party library already existed, it was not entirely compatible with
</item>
<item>
+ <title>Migrating from Ranch 1.7&#43; to Ranch 2.0</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.7/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.7/</guid>
+ <description>Ranch 2.0 adds support for multiple connection supervisors.
+Ranch 1.x had a bottleneck because it used only a single connection supervisor. This was more evident when many connections were dropped at once as the supervisor couldn&amp;apos;t keep up and failed to accept new connections while cleaning up the old ones. Ranch 2.0 behaves much better in this scenario by default. Multiple connection supervisors also helps with concurrently accepting new connections.</description>
+ </item>
+
+ <item>
<title>Migrating from Ranch 1.5 to 1.6</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/guide/migrating_from_1.5/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -1875,6 +1907,17 @@ Features added Listeners can now be suspended/resumed without stopping existing
</item>
<item>
+ <title>Migrating from Ranch 1.6 to 1.7</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.6/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.6/</guid>
+ <description>Ranch 1.7 adds built-in support for the PROXY protocol.
+The PROXY protocol is a simple and efficient way for proxies to transmit information about the client.
+While a third-party library already existed, it was not entirely compatible with the Ranch interface, in particular when socket active mode was involved. This new implementation fixes that and supports the full protocol with as little overhead as possible compared to normal operations: just one extra function call.</description>
+ </item>
+
+ <item>
<title>Migrating from Ranch 1.5 to 1.6</title>
<link>https://ninenines.eu/docs/en/ranch/1.7/guide/migrating_from_1.5/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -2051,6 +2094,17 @@ While only one response is allowed for every request, HTTP/2 introduced a mechan
</item>
<item>
+ <title>Migrating from Ranch 1.5 to 1.6</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.5/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.5/</guid>
+ <description>Ranch 1.6 added the ability to suspend and resume listeners. It also deprecates a number of features and add interfaces that will be used in Ranch 2.0.
+Ranch 1.6 is compatible with Erlang/OTP 18.0 onward. Support for older releases has been removed.
+Features added Listeners can now be suspended/resumed without stopping existing connection processes. This effectively closes the listening socket and stops the acceptor processes. Transport options can now be updated for suspended listeners.</description>
+ </item>
+
+ <item>
<title>Migrating from Ranch 1.x</title>
<link>https://ninenines.eu/docs/en/ranch/2.0/guide/migrating_from_1.x/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -2207,6 +2261,16 @@ In the context of HTTP, multipart is most often used with the multipart/form-dat
</item>
<item>
+ <title>Migrating from Ranch 1.x</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.x/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.x/</guid>
+ <description>The changelog for Ranch releases before 1.6 can be found in this section.
+1.5.0 Add transport functions getopts/2, getstat/1 and getstat/2 Fix ranch:info/0 and ranch:procs/2 in embedded mode Prevent ranch_conns_sup from stopping on unexpected messages 1.4.0 Add new transport option num_acceptor Deprecate ranch:start_listener/6 in favor of start_listener/5 Deprecate ranch:child_spec/6 in favor of child_spec/5 1.3.0 The version numbers 1.3.1 and 1.3.2 were later made to fix small mistakes made during the 1.</description>
+ </item>
+
+ <item>
<title>REST principles</title>
<link>https://ninenines.eu/docs/en/cowboy/2.4/guide/rest_principles/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -11329,15 +11393,6 @@ Description This chapter aims to list all HTTP status codes that Cowboy may retu
<item>
<title>Ranch Function Reference</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/manual/</link>
- <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
-
- <guid>https://ninenines.eu/docs/en/ranch/1.5/manual/</guid>
- <description>ranch(7) ranch(3) ranch_protocol(3) ranch_ssl(3) ranch_tcp(3) ranch_transport(3) </description>
- </item>
-
- <item>
- <title>Ranch Function Reference</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -11393,12 +11448,17 @@ ranch_ssl(3) - SSL transport ranch_tcp(3) - TCP transport Behaviors:</descrip
</item>
<item>
- <title>Ranch User Guide</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/</link>
+ <title>Ranch Function Reference</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/</guid>
- <description>Introduction Listeners Transports Protocols Embedded mode Writing parsers SSL client authentication Internals </description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/</guid>
+ <description>Name ranch - Socket acceptor pool for TCP protocols
+Description Ranch is a socket acceptor pool for TCP protocols.
+Ranch manages listeners which are a set of processes that accept and manage connections. The connection&amp;apos;s transport and protocol modules are configured per listener. Listeners can be inspected and reconfigured without interruptions in service.
+Modules Functions:
+ranch(3) - Socket acceptor pool ranch_proxy_header(3) - PROXY protocol Transports:
+ranch_ssl(3) - SSL transport ranch_tcp(3) - TCP transport Behaviors:</description>
</item>
<item>
@@ -11438,16 +11498,12 @@ ranch_ssl(3) - SSL transport ranch_tcp(3) - TCP transport Behaviors:</descrip
</item>
<item>
- <title>ranch(3)</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch/</link>
+ <title>Ranch User Guide</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch/</guid>
- <description>Name ranch - socket acceptor pool
-Description The ranch module provides functions for starting and manipulating Ranch listeners.
-Types max_conns() = non_neg_integer() | infinity Maximum number of connections allowed on this listener.
-This is a soft limit. The actual number of connections might be slightly above the limit due to concurrency when accepting new connections. Some connections may also be removed from this count explicitly by the user code.
-opt() opt() = {ack_timeout, timeout()} | {connection_type, worker | supervisor} | {max_connections, max_conns()} | {num_acceptors, pos_integer()} | {shutdown, timeout() | brutal_kill} | {socket, any()} Ranch-specific transport options.</description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/</guid>
+ <description>Interface Introduction Listeners Transports Protocols Embedded mode How to Writing parsers SSL client authentication Connection draining Advanced Internals Additional information Migrating from Ranch 2.0 to 2.1 Migrating from Ranch 1.7 to 2.0 Migrating from Ranch 1.6 to 1.7 Migrating from Ranch 1.5 to 1.6 Migrating from Ranch 1.x </description>
</item>
<item>
@@ -11507,16 +11563,17 @@ ranch:handshake(3) - Perform the transport handshake ranch:handshake_continue(3
</item>
<item>
- <title>ranch(7)</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_app/</link>
+ <title>ranch(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_app/</guid>
- <description>Name ranch - Socket acceptor pool for TCP protocols.
-Dependencies The ranch application depends on the ssl application to start. It is used for handling secure connections, when the transport is ranch_ssl. It can be disabled if SSL is not used.
-Environment The ranch application defines one application environment configuration parameter.
-profile (false) When enabled, Ranch will start eprof profiling automatically.
- You can use the ranch_app:profile_output/0 function to stop profiling and output the results to the files procs.</description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch/</guid>
+ <description>Name ranch - Socket acceptor pool
+Description The module ranch provides functions for starting and manipulating Ranch listeners.
+Exports Start/stop:
+ranch:start_listener(3) - Start a listener ranch:stop_listener(3) - Stop a listener ranch:child_spec(3) - Build child specifications for a new listener Suspend/resume:
+ranch:suspend_listener(3) - Suspend a running listener ranch:resume_listener(3) - Resume a suspended listener ranch:get_status(3) - Get a listener&amp;apos;s running state Connections:
+ranch:handshake(3) - Perform the transport handshake ranch:handshake_continue(3) - Resume the paused transport handshake ranch:handshake_cancel(3) - Cancel the paused transport handshake ranch:recv_proxy_header(3) - Receive the PROXY protocol header ranch:remove_connection(3) - Remove connection from the count Options:</description>
</item>
<item>
@@ -11576,6 +11633,20 @@ ranch_ssl(3) - SSL transport ranch_tcp(3) - TCP transport Behaviors:</descrip
</item>
<item>
+ <title>ranch(7)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_app/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_app/</guid>
+ <description>Name ranch - Socket acceptor pool for TCP protocols
+Description Ranch is a socket acceptor pool for TCP protocols.
+Ranch manages listeners which are a set of processes that accept and manage connections. The connection&amp;apos;s transport and protocol modules are configured per listener. Listeners can be inspected and reconfigured without interruptions in service.
+Modules Functions:
+ranch(3) - Socket acceptor pool ranch_proxy_header(3) - PROXY protocol Transports:
+ranch_ssl(3) - SSL transport ranch_tcp(3) - TCP transport Behaviors:</description>
+ </item>
+
+ <item>
<title>ranch:child_spec(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.child_spec/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -11624,6 +11695,18 @@ Arguments Ref The listener name is used to refer to this listener in future call
</item>
<item>
+ <title>ranch:child_spec(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.child_spec/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.child_spec/</guid>
+ <description>Name ranch:child_spec - Build child specifications for a new listener
+Description child_spec(Ref :: ranch_ref(), Transport :: module(), TransOpts :: ranch:opts(), Protocol :: module(), ProtoOpts :: any()) -&amp;gt; supervisor:child_spec() Build child specifications for a new listener which can be embedded directly in an application&amp;apos;s supervision tree.
+The actual listener is placed under a supervisor which monitors ranch_server via a proxy process and will restart the listener if ranch_server crashes.
+Arguments Ref The listener name is used to refer to this listener in future calls, for example when updating the configuration.</description>
+ </item>
+
+ <item>
<title>ranch:get_addr(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_addr/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -11678,6 +11761,18 @@ Arguments Ref The listener name.
</item>
<item>
+ <title>ranch:get_addr(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_addr/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_addr/</guid>
+ <description>Name ranch:get_addr - Get the listening address
+Description get_addr(Ref :: ranch:ref()) -&amp;gt; {IP :: inet:ip_address(), Port :: inet:port_number()} | {local, SocketFile :: binary()} | {undefined, undefined} Get the listening address.
+Arguments Ref The listener name.
+ Return value The address of the listener is returned as a tuple of the form {IP, Port} when listening on a network interface, or {local, SocketFile} when listening on a UNIX Domain socket.</description>
+ </item>
+
+ <item>
<title>ranch:get_max_connections(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_max_connections/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -11730,6 +11825,19 @@ Changelog 2.0: The maximum number of connections is now per connection superviso
</item>
<item>
+ <title>ranch:get_max_connections(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_max_connections/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_max_connections/</guid>
+ <description>Name ranch:get_max_connections - Get the max number of connections per connection supervisor
+Description get_max_connections(Ref :: ranch:ref()) -&amp;gt; MaxConns :: ranch:max_conns() Get the max number of connections per connection supervisor.
+Arguments Ref The listener name.
+ Return value The maximum number of connections per connection supervisor is returned.
+Changelog 2.0: The maximum number of connections is now per connection supervisor. Examples Get the max number of connections per connection supervisor MaxConns = ranch:get_max_connections(example).</description>
+ </item>
+
+ <item>
<title>ranch:get_port(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_port/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -11786,6 +11894,20 @@ When the listener is suspended or using a UNIX Domain socket instead of a networ
</item>
<item>
+ <title>ranch:get_port(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_port/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_port/</guid>
+ <description>Name ranch:get_port - Get the listening port
+Description get_port(Ref :: ranch:ref()) -&amp;gt; Port :: inet:port_number() | undefined Get the listening port.
+This function is particularly useful to retrieve the listening port number when it was not provided in the options and was chosen randomly instead.
+Arguments Ref The listener name.
+ Return value The listening port is returned.
+When the listener is suspended or using a UNIX Domain socket instead of a network interface, undefined will be returned.</description>
+ </item>
+
+ <item>
<title>ranch:get_protocol_options(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_protocol_options/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -11838,6 +11960,19 @@ Examples Get the current protocol options ProtoOpts = ranch:get_protocol_options
</item>
<item>
+ <title>ranch:get_protocol_options(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_protocol_options/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_protocol_options/</guid>
+ <description>Name ranch:get_protocol_options - Get the current protocol options
+Description get_protocol_options(Ref :: ranch:ref()) -&amp;gt; ProtoOpts :: any() Get the current protocol options.
+Arguments Ref The listener name.
+ Return value The current protocol options are returned.
+Examples Get the current protocol options ProtoOpts = ranch:get_protocol_options(example). See also ranch:get_max_connections(3), ranch:get_transport_options(3), ranch:set_protocol_options(3), ranch(3)</description>
+ </item>
+
+ <item>
<title>ranch:get_status(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_status/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -11890,6 +12025,19 @@ Changelog 1.6: Function introduced. Examples Get a listener&amp;apos;s running
</item>
<item>
+ <title>ranch:get_status(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_status/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_status/</guid>
+ <description>Name ranch:get_status - Get a listener&amp;apos;s running state
+Description get_status(Ref :: ranch_ref()) -&amp;gt; running | suspended Get a listener&amp;apos;s running state.
+Arguments Ref The listener name.
+ Return value An atom is returned indicating the running status of the listener.
+Changelog 1.6: Function introduced. Examples Get a listener&amp;apos;s running state ranch:get_status(example). See also ranch:start_listener(3), ranch:stop_listener(3), ranch:suspend_listener(3), ranch:resume_listener(3), ranch:set_transport_options(3), ranch:wait_for_connections(3), ranch(3)</description>
+ </item>
+
+ <item>
<title>ranch:get_transport_options(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_transport_options/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -11942,6 +12090,19 @@ Examples Get the current transport options TransOpts = ranch:get_transport_optio
</item>
<item>
+ <title>ranch:get_transport_options(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_transport_options/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_transport_options/</guid>
+ <description>Name ranch:get_transport_options - Get the current transport options
+Description get_transport_options(Ref :: ranch:ref()) -&amp;gt; TransOpts :: ranch:transport_opts(any()) Get the current transport options.
+Arguments Ref The listener name.
+ Return value The current transport options are returned.
+Examples Get the current transport options TransOpts = ranch:get_transport_options(example). See also ranch:get_max_connections(3), ranch:get_protocol_options(3), ranch:set_transport_options(3), ranch(3)</description>
+ </item>
+
+ <item>
<title>ranch:handshake(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.handshake/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -11986,6 +12147,17 @@ This function must be called by the protocol process in order to retrieve the so
</item>
<item>
+ <title>ranch:handshake(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.handshake/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.handshake/</guid>
+ <description>Name ranch:handshake - Perform the transport handshake
+Description handshake(Ref) -&amp;gt; {ok, Socket} | {continue, Info} handshake(Ref, Opts) -&amp;gt; {ok, Socket} | {continue, Info} Ref :: ranch:ref() Opts :: any() Socket :: any() Info :: any() Perform the transport handshake.
+This function must be called by the protocol process in order to retrieve the socket for the connection. Ranch performs the handshake necessary to give control of the socket to this process and also does the transport handshake, for example setting up the TLS connection.</description>
+ </item>
+
+ <item>
<title>ranch:handshake_cancel(3)</title>
<link>https://ninenines.eu/docs/en/ranch/2.0/manual/ranch.handshake_cancel/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12001,6 +12173,21 @@ Changelog 2.0: Function introduced. Examples Cancel a paused transport handsha
</item>
<item>
+ <title>ranch:handshake_cancel(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.handshake_cancel/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.handshake_cancel/</guid>
+ <description>Name ranch:handshake_cancel - Cancel the paused transport handshake
+Description handshake_cancel(Ref :: ranch:ref()) -&amp;gt; ok Cancel the paused transport handshake.
+This function may be called by the protocol process to cancel a paused handshake.
+Arguments Ref The listener name.
+Allowed options depend on the transport module.
+ Return value The return value depends on the transport module.
+Changelog 2.0: Function introduced. Examples Cancel a paused transport handshake start_link(Ref, Transport, Opts) -&amp;gt; Pid = proc_lib:spawn_link(?</description>
+ </item>
+
+ <item>
<title>ranch:handshake_continue(3)</title>
<link>https://ninenines.eu/docs/en/ranch/2.0/manual/ranch.handshake_continue/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12016,6 +12203,21 @@ Allowed options depend on the transport module.
</item>
<item>
+ <title>ranch:handshake_continue(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.handshake_continue/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.handshake_continue/</guid>
+ <description>Name ranch:handshake_continue - Resume the paused transport handshake
+Description handshake_continue(Ref) -&amp;gt; {ok, Socket} handshake_continue(Ref, Opts) -&amp;gt; {ok, Socket} Ref :: ranch:ref() Opts :: any() Socket :: any() Resume the paused transport handshake.
+This function must be called by the protocol process in order to resume a paused handshake.
+Arguments Ref The listener name.
+ Opts Transport handshake options.
+Allowed options depend on the transport module.
+ Return value An ok tuple is returned containing the socket for the connection.</description>
+ </item>
+
+ <item>
<title>ranch:info(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.info/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12076,6 +12278,21 @@ pid Pid of the listener&amp;apos;s top-level supervisor.
</item>
<item>
+ <title>ranch:info(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.info/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.info/</guid>
+ <description>Name ranch:info - Overview of Ranch listeners
+Description info() -&amp;gt; #{Ref := Info} info(Ref) -&amp;gt; Info Info :: #{Key :: atom() := Value :: any()} Overview of Ranch listeners.
+Arguments Ref The listener name.
+ Return value Returns detailed information about one or all Ranch listeners. The following keys are returned:
+pid Pid of the listener&amp;apos;s top-level supervisor.
+ status Listener status, either running or suspended.
+ ip Interface Ranch listens on.</description>
+ </item>
+
+ <item>
<title>ranch:procs(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.procs/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12132,6 +12349,20 @@ Examples Get the pids of the acceptor processes Pids = ranch:procs(acceptors).
</item>
<item>
+ <title>ranch:procs(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.procs/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.procs/</guid>
+ <description>Name ranch:procs - Retrieve pids from a listener
+Description procs(Ref :: ranch:ref(), Type :: acceptors | connections) -&amp;gt; Pids :: [pid()] Retrieve pids from a listener.
+Arguments Ref The listener name.
+ Type The type of process that will be returned.
+ Return value A list of pids is returned.
+Examples Get the pids of the acceptor processes Pids = ranch:procs(acceptors). Get the pids of the connection processes Pids = ranch:procs(connections).</description>
+ </item>
+
+ <item>
<title>ranch:recv_proxy_header(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.7/manual/ranch.recv_proxy_header/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12174,6 +12405,20 @@ Arguments Ref The listener name.
</item>
<item>
+ <title>ranch:recv_proxy_header(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.recv_proxy_header/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.recv_proxy_header/</guid>
+ <description>Name ranch:recv_proxy_header - Receive the PROXY protocol header
+Description recv_proxy_header(ranch:ref(), timeout()) -&amp;gt; {ok, ranch_proxy_header:proxy_info()} | {error, Reason :: atom()} | {error, protocol_error, HumanReadable :: atom()} Receive the PROXY protocol header.
+This function must be called before ranch:handshake/1,2 on newly accepted connections to read and parse the PROXY protocol header, if any.
+Arguments Ref The listener name.
+ Timeout Receive timeout in milliseconds.
+ Return value An ok tuple is returned containing PROXY header information on success.</description>
+ </item>
+
+ <item>
<title>ranch:remove_connection(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.remove_connection/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12222,6 +12467,18 @@ This function may only be called from a connection process.</description>
</item>
<item>
+ <title>ranch:remove_connection(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.remove_connection/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.remove_connection/</guid>
+ <description>Name ranch:remove_connection - Remove connection from the count
+Description remove_connection(Ref :: ranch:ref()) -&amp;gt; ok Remove connection from the count.
+This connection will no longer be included in the count when limiting the number of connections. This can be useful in a mixed environment where some connections are active and others are passive. Passive connections spend most of their time idling and are not consuming much resources.
+This function may only be called from a connection process.</description>
+ </item>
+
+ <item>
<title>ranch:resume_listener(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.resume_listener/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12278,6 +12535,20 @@ Arguments Ref The listener name.
</item>
<item>
+ <title>ranch:resume_listener(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.resume_listener/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.resume_listener/</guid>
+ <description>Name ranch:resume_listener - Resume a suspended listener
+Description resume_listener(Ref :: ranch_ref()) -&amp;gt; ok | {error, any()} Resume a suspended listener.
+Ranch will start listening for and accepting connections again. The function ranch:set_transport_options(3) can be used to change the transport options before resuming the listener.
+Nothing is done when the listener is already running.
+Arguments Ref The listener name.
+ Return value The atom ok is returned on success.</description>
+ </item>
+
+ <item>
<title>ranch:set_max_connections(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.set_max_connections/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12325,6 +12596,17 @@ The change will be applied immediately. If the new value is smaller than the pre
</item>
<item>
+ <title>ranch:set_max_connections(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.set_max_connections/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.set_max_connections/</guid>
+ <description>Name ranch:set_max_connections - Set the max number of connections per connection supervisor
+Description set_max_connections(Ref :: ranch:ref(), MaxConns :: ranch:max_conns()) -&amp;gt; ok Set the max number of connections per connection supervisor.
+The change will be applied immediately. If the new value is smaller than the previous one, Ranch will wait for the extra connections to terminate and will not accept new connections until the number of connections goes below the limit.</description>
+ </item>
+
+ <item>
<title>ranch:set_protocol_options(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.set_protocol_options/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12385,6 +12667,18 @@ Examples Set the protocol options ranch:set_protocol_options(example, ProtoOpts)
</item>
<item>
+ <title>ranch:set_protocol_options(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.set_protocol_options/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.set_protocol_options/</guid>
+ <description>Name ranch:set_protocol_options - Set the protocol options
+Description set_protocol_options(Ref :: ranch:ref(), ProtoOpts :: any()) -&amp;gt; ok Set the protocol options.
+The change will be applied immediately for all new connections. Old connections will not receive the new options.
+Note that the complete set of protocol options is replaced. To update a subset of the options, it is recommended to get the current protocol options using ranch:get_protocol_options(3), update them and then set them back using this function.</description>
+ </item>
+
+ <item>
<title>ranch:set_transport_options(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.set_transport_options/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12442,6 +12736,18 @@ immediately: max_connections handshake_timeout shutdown only after the list
</item>
<item>
+ <title>ranch:set_transport_options(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.set_transport_options/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.set_transport_options/</guid>
+ <description>Name ranch:set_transport_options - Set the transport options
+Description set_transport_options(Ref :: ranch:ref(), TransOpts :: ranch:opts()) -&amp;gt; ok | {error, Reason :: term()} Set the transport options.
+The complete set of transport options is replaced. To update a subset of the transport options, it is recommended to get the current transport options using ranch:get_transport_options(3), update them and then set them back using this function.
+Changes to the following options will take effect.</description>
+ </item>
+
+ <item>
<title>ranch:start_listener(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.start_listener/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12490,6 +12796,18 @@ Arguments Ref The listener name is used to refer to this listener in future call
</item>
<item>
+ <title>ranch:start_listener(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.start_listener/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.start_listener/</guid>
+ <description>Name ranch:start_listener - Start a listener
+Description start_listener(Ref :: ranch_ref(), Transport :: module(), TransOpts :: ranch:opts(), Protocol :: module(), ProtoOpts :: any()) -&amp;gt; {ok, ListenerPid :: pid()} | {error, any()} Start a listener.
+A listener is a set of processes that accepts and manages connections using the given transport and protocol modules.
+Arguments Ref The listener name is used to refer to this listener in future calls, for example when stopping it or when updating the configuration.</description>
+ </item>
+
+ <item>
<title>ranch:stop_listener(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.stop_listener/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12538,6 +12856,18 @@ In order for the connection processes to exit gracefully, they need to trap exit
</item>
<item>
+ <title>ranch:stop_listener(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.stop_listener/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.stop_listener/</guid>
+ <description>Name ranch:stop_listener - Stop a listener
+Description stop_listener(Ref :: ranch_ref()) -&amp;gt; ok | {error, not_found} Stop a listener.
+The listener is stopped gracefully, first by closing the listening port, then by stopping the connection processes. These processes are stopped according to the shutdown transport option, which may be set to brutally kill all connection processes or give them some time to stop properly.
+In order for the connection processes to exit gracefully, they need to trap exit signals and stop before the configured shutdown timeout.</description>
+ </item>
+
+ <item>
<title>ranch:suspend_listener(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.suspend_listener/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12586,6 +12916,18 @@ Some transport options can only be changed when the listener is suspended. Pleas
</item>
<item>
+ <title>ranch:suspend_listener(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.suspend_listener/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.suspend_listener/</guid>
+ <description>Name ranch:suspend_listener - Suspend a running listener
+Description suspend_listener(Ref :: ranch_ref()) -&amp;gt; ok | {error, any()} Suspend a running listener.
+Ranch will stop listening for and accepting connections and the listening socket will be closed. Existing connections will continue undisturbed. The function ranch:wait_for_connections(3) can be used to wait for connections to be closed if necessary.
+Some transport options can only be changed when the listener is suspended. Please consult the ranch:set_transport_options(3) manual for more information.</description>
+ </item>
+
+ <item>
<title>ranch:wait_for_connections(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.wait_for_connections/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12634,19 +12976,15 @@ This function can be used to gracefully shutdown a listener by first suspending
</item>
<item>
- <title>ranch_protocol(3)</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_protocol/</link>
+ <title>ranch:wait_for_connections(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.wait_for_connections/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_protocol/</guid>
- <description>Name ranch_protocol - behaviour for protocol modules
-Description The ranch_protocol behaviour defines the interface used by Ranch protocols.
-Types None.
-Callbacks start_link(Ref, Socket, Transport, ProtoOpts) -&amp;gt; {ok, pid()} | {ok, pid(), pid()} Ref = ranch:ref() Listener name.
- Socket = any() Socket for this connection.
- Transport = module() Transport module for this socket.
- ProtoOpts = any() Protocol options.
- Start a new connection process for the given socket.</description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.wait_for_connections/</guid>
+ <description>Name ranch:wait_for_connections - Wait for a specific number of connections
+Description wait_for_connections(Ref :: ranch:ref(), Operator, NumConns :: non_neg_integer()) -&amp;gt; ok Operator :: &#39;&amp;gt;&#39; | &#39;&amp;gt;=&#39; | &#39;==&#39; | &#39;=&amp;lt;&#39; | &#39;&amp;lt;&#39; Wait for a specific number of connections.
+This function waits until the number of connections on the given listener becomes higher than, equal to or lower than the given number. It never returns otherwise.
+This function can be used to gracefully shutdown a listener by first suspending the listener and then waiting for connections to terminate before finally stopping the listener.</description>
</item>
<item>
@@ -12702,6 +13040,19 @@ The only purpose of this callback is to start a process that will handle the soc
</item>
<item>
+ <title>ranch_protocol(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_protocol/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_protocol/</guid>
+ <description>Name ranch_protocol - Protocol modules
+Description The module ranch_protocol defines the interface used by Ranch protocols.
+Callbacks Ranch protocols implement the following interface:
+start_link(Ref :: ranch:ref(), Transport :: module(), ProtoOpts :: any()) -&amp;gt; {ok, ConnPid :: pid()} | {ok, SupPid :: pid(), ConnPid :: pid()} Start a new connection process.
+The only purpose of this callback is to start a process that will handle the socket. It must spawn the process, link and then return the new pid.</description>
+ </item>
+
+ <item>
<title>ranch_proxy_header(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.7/manual/ranch_proxy_header/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12735,6 +13086,17 @@ Exports ranch_proxy_header:parse(3) - Parse a PROXY protocol header ranch_proxy
</item>
<item>
+ <title>ranch_proxy_header(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header/</guid>
+ <description>Name ranch_proxy_header - PROXY protocol
+Description The module ranch_proxy_header provides functions for parsing and building the PROXY protocol header.
+Exports ranch_proxy_header:parse(3) - Parse a PROXY protocol header ranch_proxy_header:header(3) - Build a PROXY protocol header ranch_proxy_header:to_connection_info(3) - Convert proxy_info() to ssl:connection_info() Types proxy_info() proxy_info() = #{ %% Mandatory part. version := 1 | 2, command := local | proxy, transport_family =&amp;gt; undefined | ipv4 | ipv6 | unix, transport_protocol =&amp;gt; undefined | stream | dgram, %% Addresses.</description>
+ </item>
+
+ <item>
<title>ranch_proxy_header:header(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.7/manual/ranch_proxy_header.header/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12774,6 +13136,19 @@ Arguments ProxyInfo The proxy information to encode.
</item>
<item>
+ <title>ranch_proxy_header:header(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header.header/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header.header/</guid>
+ <description>Name ranch_proxy_header:header - Build a PROXY protocol header
+Description header(ProxyInfo) -&amp;gt; header(ProxyInfo, #{}) header(ProxyInfo, BuildOpts) -&amp;gt; iodata() ProxyInfo :: ranch_proxy_header:proxy_info() BuildOpts :: #{ checksum =&amp;gt; crc32c, padding =&amp;gt; pos_integer() %% &amp;gt;= 3 } Build a PROXY protocol header.
+Arguments ProxyInfo The proxy information to encode.
+ BuildOpts Options to control whether to add a checksum or padding should be included in the encoded PROXY protocol header.
+ Return value The PROXY protocol header is returned.</description>
+ </item>
+
+ <item>
<title>ranch_proxy_header:parse(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.7/manual/ranch_proxy_header.parse/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12813,14 +13188,30 @@ An error tuple is returned when a protocol error is detected.</description>
</item>
<item>
- <title>ranch_ssl(3)</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_ssl/</link>
+ <title>ranch_proxy_header:parse(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header.parse/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_ssl/</guid>
- <description>Name ranch_ssl - SSL transport module
-Description The ranch_ssl module implements an SSL Ranch transport.
-Types ssl_opt() ssl_opt() = {alpn_preferred_protocols, [binary()]} | {beast_mitigation, one_n_minus_one | zero_n | disabled} | {cacertfile, string()} | {cacerts, [public_key:der_encoded()]} | {cert, public_key:der_encoded()} | {certfile, string()} | {ciphers, [ssl:erl_cipher_suite()] | string()} | {client_renegotiation, boolean()} | {crl_cache, {module(), {internal | any(), list()}}} | {crl_check, boolean() | peer | best_effort} | {depth, 0..255} | {dh, public_key:der_encoded()} | {dhfile, string()} | {fail_if_no_peer_cert, boolean()} | {hibernate_after, integer() | undefined} | {honor_cipher_order, boolean()} | {key, {&#39;RSAPrivateKey&#39; | &#39;DSAPrivateKey&#39; | &#39;PrivateKeyInfo&#39;, public_key:der_encoded()}} | {keyfile, string()} | {log_alert, boolean()} | {next_protocols_advertised, [binary()]} | {padding_check, boolean()} | {partial_chain, fun(([public_key:der_encoded()]) -&amp;gt; {trusted_ca, public_key:der_encoded()} | unknown_ca)} | {password, string()} | {psk_identity, string()} | {reuse_session, fun()} | {reuse_sessions, boolean()} | {secure_renegotiate, boolean()} | {signature_algs, [{atom(), atom()}]} | {sni_fun, fun()} | {sni_hosts, [{string(), ssl_opt()}]} | {user_lookup_fun, {fun(), any()}} | {v2_hello_compatible, boolean()} | {verify, ssl:verify_type()} | {verify_fun, {fun(), any()}} | {versions, [atom()]}.</description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header.parse/</guid>
+ <description>Name ranch_proxy_header:parse - Parse a PROXY protocol header
+Description parse(Data :: binary()) -&amp;gt; {ok, ranch_proxy_header:proxy_info(), Rest :: binary()} | {error, HumanReadable :: atom()} Parse a PROXY protocol header.
+Arguments Data The PROXY protocol header optionally followed by more data.
+ Return value An ok tuple is returned on success, containing the proxy information found in the header and the rest of the data if more was provided.
+An error tuple is returned when a protocol error is detected.</description>
+ </item>
+
+ <item>
+ <title>ranch_proxy_header:to_connection_info(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header.to_connection_info/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header.to_connection_info/</guid>
+ <description>Name ranch_proxy_header:to_connection_info - Convert proxy_info() to ssl:connection_info()
+Description to_connection_info(ProxyInfo :: proxy_info()) -&amp;gt; ssl:connection_info() Convert ranch_proxy_header:proxy_info() information to the ssl:connection_info() format returned by ssl:connection_information/1,2.
+Arguments ProxyInfo The PROXY protocol information.
+ Return value Connection information is returned as a proplist.
+Because the PROXY protocol header includes limited information, only the keys protocol, selected_cipher_suite and sni_hostname will be returned, at most. All keys are optional.
+Changelog 2.1: Function introduced. Examples Convert the PROXY protocol information ConnInfo = ranch_proxy_header:to_connection_info(ProxyInfo).</description>
</item>
<item>
@@ -12884,15 +13275,18 @@ ssl_opt() ssl_opt() = {alpn_preferred_protocols, [binary()]} | {anti_replay, &#3
</item>
<item>
- <title>ranch_tcp(3)</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_tcp/</link>
+ <title>ranch_ssl(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_ssl/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_tcp/</guid>
- <description>Name ranch_tcp - TCP transport module
-Description The ranch_tcp module implements a TCP Ranch transport.
-Note that due to bugs in OTP up to at least R16B02, it is recommended to disable async threads when using the sendfile function of this transport, as it can make the threads stuck indefinitely.
-Types opt() opt() = {backlog, non_neg_integer()} | {buffer, non_neg_integer()} | {delay_send, boolean()} | {dontroute, boolean()} | {exit_on_close, boolean()} | {fd, non_neg_integer()} | {high_msgq_watermark, non_neg_integer()} | {high_watermark, non_neg_integer()} | inet | inet6 | {ip, inet:ip_address()} | {ipv6_v6only, boolean()} | {keepalive, boolean()} | {linger, {boolean(), non_neg_integer()}} | {low_msgq_watermark, non_neg_integer()} | {low_watermark, non_neg_integer()} | {nodelay, boolean()} | {port, inet:port_number()} | {priority, integer()} | {raw, non_neg_integer(), non_neg_integer(), binary()} | {recbuf, non_neg_integer()} | {send_timeout, timeout()} | {send_timeout_close, boolean()} | {sndbuf, non_neg_integer()} | {tos, integer()} Listen options.</description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_ssl/</guid>
+ <description>Name ranch_ssl - SSL transport
+Description The module ranch_ssl implements an SSL Ranch transport.
+Exports The module ranch_ssl implements the interface defined by ranch_transport(3).
+Types opt() opt() :: ranch_tcp:opt() | ssl_opt() Listen options.
+The TCP options are defined in ranch_tcp(3).
+opts() opts() :: [opt()] List of listen options.
+ssl_opt() ssl_opt() = {alpn_preferred_protocols, [binary()]} | {anti_replay, &#39;10k&#39; | &#39;100k&#39; | {integer(), integer(), integer()}} | {beast_mitigation, one_n_minus_one | zero_n | disabled} | {cacertfile, file:filename()} | {cacerts, [public_key:der_encoded()]} | {cert, public_key:der_encoded()} | {certfile, file:filename()} | {ciphers, ssl:ciphers()} | {client_renegotiation, boolean()} | {crl_cache, [any()]} | {crl_check, boolean() | peer | best_effort} | {depth, integer()} | {dh, binary()} | {dhfile, file:filename()} | {eccs, [ssl:named_curve()]} | {fail_if_no_peer_cert, boolean()} | {handshake, hello | full} | {hibernate_after, timeout()} | {honor_cipher_order, boolean()} | {honor_ecc_order, boolean()} | {key, ssl:key()} | {key_update_at, pos_integer()} | {keyfile, file:filename()} | {log_alert, boolean()} | {log_level, logger:level()} | {max_handshake_size, integer()} | {middlebox_comp_mode, boolean()} | {next_protocols_advertised, [binary()]} | {padding_check, boolean()} | {partial_chain, fun()} | {password, string()} | {protocol, tls | dtls} | {psk_identity, string()} | {reuse_session, fun()} | {reuse_sessions, boolean()} | {secure_renegotiate, boolean()} | {session_tickets, disabled | stateful | stateless} | {signature_algs, [{ssl:hash(), ssl:sign_algo()}]} | {signature_algs_cert, [ssl:sign_scheme()]} | {sni_fun, fun()} | {sni_hosts, [{string(), ssl_opt()}]} | {supported_groups, [ssl:group()]} | {user_lookup_fun, {fun(), any()}} | {verify, verify_none | verify_peer} | {verify_fun, {fun(), any()}} | {versions, [ssl:protocol_version()]} SSL-specific listen options.</description>
</item>
<item>
@@ -12948,18 +13342,16 @@ Types opt() opt() = {backlog, non_neg_integer()} | {buffer, non_neg_integer()} |
</item>
<item>
- <title>ranch_transport(3)</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_transport/</link>
+ <title>ranch_tcp(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_tcp/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_transport/</guid>
- <description>Name ranch_transport - behaviour for transport modules
-Description The ranch_transport behaviour defines the interface used by Ranch transports.
-Types sendfile_opts() = [{chunk_size, non_neg_integer()}] Options used by the sendfile function and callbacks.
-Allows configuring the chunk size, in bytes. Defaults to 8191 bytes.
-Callbacks accept(LSocket, Timeout) -&amp;gt; {ok, CSocket} | {error, closed | timeout | atom()} LSocket = CSocket = any() Listening socket.
- Timeout = timeout() Accept timeout.
- Accept a connection on the given listening socket.</description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_tcp/</guid>
+ <description>Name ranch_tcp - TCP transport
+Description The module ranch_tcp implements a TCP Ranch transport.
+The function sendfile may not work correctly when used against files stored in a VirtualBox shared folder.
+Exports The module ranch_tcp implements the interface defined by ranch_transport(3).
+Types opt() opt() = {backlog, non_neg_integer()} | {buffer, non_neg_integer()} | {delay_send, boolean()} | {dontroute, boolean()} | {exit_on_close, boolean()} | {fd, non_neg_integer()} | {high_msgq_watermark, non_neg_integer()} | {high_watermark, non_neg_integer()} | inet | inet6 | {ip, inet:ip_address() | inet:local_address()} | {ipv6_v6only, boolean()} | {keepalive, boolean()} | {linger, {boolean(), non_neg_integer()}} | {low_msgq_watermark, non_neg_integer()} | {low_watermark, non_neg_integer()} | {nodelay, boolean()} | {port, inet:port_number()} | {priority, integer()} | {raw, non_neg_integer(), non_neg_integer(), binary()} | {recbuf, non_neg_integer()} | {send_timeout, timeout()} | {send_timeout_close, boolean()} | {sndbuf, non_neg_integer()} | {tos, integer()} Listen options.</description>
</item>
<item>
@@ -13015,6 +13407,19 @@ close close(Socket :: socket()) -&amp;gt; ok Close the socket.</description>
</item>
<item>
+ <title>ranch_transport(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_transport/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_transport/</guid>
+ <description>Name ranch_transport - Transport modules
+Description The module ranch_transport defines the interface used by Ranch transports.
+Callbacks Ranch transports implement the following interface:
+accept accept(LSocket :: socket(), Timeout :: timeout()) -&amp;gt; {ok, Socket :: socket()} | {error, closed | timeout | atom()} Use the listening socket returned by listen/1 to accept a new connection. The timeout is specified in milliseconds.
+close close(Socket :: socket()) -&amp;gt; ok Close the socket.</description>
+ </item>
+
+ <item>
<title>ranch_transport:sendfile(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch_transport.sendfile/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -13062,5 +13467,17 @@ The file may be sent full or in parts, and may be specified by its filename or b
This function emulates the function file:sendfile/2,4,5 and may be used when transports are not manipulating TCP directly.</description>
</item>
+ <item>
+ <title>ranch_transport:sendfile(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_transport.sendfile/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_transport.sendfile/</guid>
+ <description>Name ranch_transport:sendfile - Send a file on the socket
+Description sendfile(Transport :: module(), Socket :: ranch_transport:socket(), File :: file:name_all() | file:fd(), Offset :: non_neg_integer(), Bytes :: non_neg_integer(), Opts :: ranch_transport:sendfile_opts()) -&amp;gt; {ok, SentBytes :: non_neg_integer()} | {error, atom()} Send a file on the socket.
+The file may be sent full or in parts, and may be specified by its filename or by an already open file descriptor.
+This function emulates the function file:sendfile/2,4,5 and may be used when transports are not manipulating TCP directly.</description>
+ </item>
+
</channel>
</rss> \ No newline at end of file
diff --git a/donate/index.html b/donate/index.html
index 2e3e1805..b8e78493 100644
--- a/donate/index.html
+++ b/donate/index.html
@@ -764,6 +764,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
@@ -2387,6 +2401,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
</div>
</div>
</div>
diff --git a/erlanger-playbook/index.html b/erlanger-playbook/index.html
index 32103622..2e16b0f6 100644
--- a/erlanger-playbook/index.html
+++ b/erlanger-playbook/index.html
@@ -804,6 +804,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
@@ -2427,6 +2441,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
</div>
</div>
</div>
diff --git a/index.html b/index.html
index fd1e97bc..ffd67c04 100644
--- a/index.html
+++ b/index.html
@@ -198,10 +198,10 @@
<a class="btn btn-large" href="https://github.com/ninenines/ranch">Source Code</a>
- <a class="btn btn-large" href="/docs/en/ranch/2.0/guide/">User Guide</a>
+ <a class="btn btn-large" href="/docs/en/ranch/2.1/guide/">User Guide</a>
- <a class="btn btn-large" href="/docs/en/ranch/2.0/manual/">Manual</a>
+ <a class="btn btn-large" href="/docs/en/ranch/2.1/manual/">Manual</a>
</p>
@@ -905,6 +905,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<p>Reward my work via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a> and<br/>GitHub will double the funds I receive!</p>
@@ -2512,6 +2526,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
</div></div>
</div>
diff --git a/index.xml b/index.xml
index 90c5d4f5..81d44bc6 100644
--- a/index.xml
+++ b/index.xml
@@ -88,10 +88,10 @@ Copyright (c) 2013-2020, Loïc Hoguin &amp;lt;[email protected]&amp;gt; Permiss
<item>
<title>Introduction</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/introduction/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.6/guide/introduction/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/introduction/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.6/guide/introduction/</guid>
<description>Ranch is a socket acceptor pool for TCP protocols.
Ranch aims to provide everything you need to accept TCP connections with a small code base and low latency while being easy to use directly as an application or to embed into your own.
Prerequisites It is assumed the developer already knows Erlang and has some experience with socket programming and TCP protocols.
@@ -100,10 +100,10 @@ Supported platforms Ranch is tested and supported on Linux, FreeBSD, OSX and Win
<item>
<title>Introduction</title>
- <link>https://ninenines.eu/docs/en/ranch/1.6/guide/introduction/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.7/guide/introduction/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.6/guide/introduction/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.7/guide/introduction/</guid>
<description>Ranch is a socket acceptor pool for TCP protocols.
Ranch aims to provide everything you need to accept TCP connections with a small code base and low latency while being easy to use directly as an application or to embed into your own.
Prerequisites It is assumed the developer already knows Erlang and has some experience with socket programming and TCP protocols.
@@ -112,10 +112,10 @@ Supported platforms Ranch is tested and supported on Linux, FreeBSD, OSX and Win
<item>
<title>Introduction</title>
- <link>https://ninenines.eu/docs/en/ranch/1.7/guide/introduction/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.8/guide/introduction/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.7/guide/introduction/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.8/guide/introduction/</guid>
<description>Ranch is a socket acceptor pool for TCP protocols.
Ranch aims to provide everything you need to accept TCP connections with a small code base and low latency while being easy to use directly as an application or to embed into your own.
Prerequisites It is assumed the developer already knows Erlang and has some experience with socket programming and TCP protocols.
@@ -124,22 +124,22 @@ Supported platforms Ranch is tested and supported on Linux, FreeBSD, OSX and Win
<item>
<title>Introduction</title>
- <link>https://ninenines.eu/docs/en/ranch/1.8/guide/introduction/</link>
+ <link>https://ninenines.eu/docs/en/ranch/2.0/guide/introduction/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.8/guide/introduction/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/2.0/guide/introduction/</guid>
<description>Ranch is a socket acceptor pool for TCP protocols.
Ranch aims to provide everything you need to accept TCP connections with a small code base and low latency while being easy to use directly as an application or to embed into your own.
Prerequisites It is assumed the developer already knows Erlang and has some experience with socket programming and TCP protocols.
-Supported platforms Ranch is tested and supported on Linux, FreeBSD, OSX and Windows.</description>
+Supported platforms Ranch is tested and supported on Linux, FreeBSD, macOS and Windows.</description>
</item>
<item>
<title>Introduction</title>
- <link>https://ninenines.eu/docs/en/ranch/2.0/guide/introduction/</link>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/introduction/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/2.0/guide/introduction/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/introduction/</guid>
<description>Ranch is a socket acceptor pool for TCP protocols.
Ranch aims to provide everything you need to accept TCP connections with a small code base and low latency while being easy to use directly as an application or to embed into your own.
Prerequisites It is assumed the developer already knows Erlang and has some experience with socket programming and TCP protocols.
@@ -274,16 +274,6 @@ The Web is concurrent When you access a website there is little concurrency invo
<item>
<title>Listeners</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/listeners/</link>
- <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
-
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/listeners/</guid>
- <description>A listener is a set of processes whose role is to listen on a port for new connections. It manages a pool of acceptor processes, each of them indefinitely accepting connections. When it does, it starts a new process executing the protocol handler code. All the socket programming is abstracted through the use of transport handlers.
-The listener takes care of supervising all the acceptor and connection processes, allowing developers to focus on building their application.</description>
- </item>
-
- <item>
- <title>Listeners</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/guide/listeners/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -323,6 +313,16 @@ The listener takes care of supervising all the acceptor and connection processes
</item>
<item>
+ <title>Listeners</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/listeners/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/listeners/</guid>
+ <description>A listener is a set of processes whose role is to listen on a port for new connections. It manages a pool of acceptor processes, each of them indefinitely accepting connections. When it does, it starts a new process executing the protocol handler code. All the socket programming is abstracted through the use of transport handlers.
+The listener takes care of supervising all the acceptor and connection processes, allowing developers to focus on building their application.</description>
+ </item>
+
+ <item>
<title>Starting and stopping</title>
<link>https://ninenines.eu/docs/en/gun/1.0/guide/start/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -516,10 +516,10 @@ Cowboy is a high quality project. It has a small code base, is very efficient (b
<item>
<title>Transports</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/transports/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.6/guide/transports/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/transports/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.6/guide/transports/</guid>
<description>A transport defines the interface to interact with a socket.
Transports can be used for connecting, listening and accepting connections, but also for receiving and sending data. Both passive and active mode are supported, although all sockets are initialized as passive.
TCP transport The TCP transport is a thin wrapper around gen_tcp.
@@ -529,10 +529,10 @@ Ranch depends on ssl by default so any necessary dependencies will start when Ra
<item>
<title>Transports</title>
- <link>https://ninenines.eu/docs/en/ranch/1.6/guide/transports/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.7/guide/transports/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.6/guide/transports/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.7/guide/transports/</guid>
<description>A transport defines the interface to interact with a socket.
Transports can be used for connecting, listening and accepting connections, but also for receiving and sending data. Both passive and active mode are supported, although all sockets are initialized as passive.
TCP transport The TCP transport is a thin wrapper around gen_tcp.
@@ -542,10 +542,10 @@ Ranch depends on ssl by default so any necessary dependencies will start when Ra
<item>
<title>Transports</title>
- <link>https://ninenines.eu/docs/en/ranch/1.7/guide/transports/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.8/guide/transports/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.7/guide/transports/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.8/guide/transports/</guid>
<description>A transport defines the interface to interact with a socket.
Transports can be used for connecting, listening and accepting connections, but also for receiving and sending data. Both passive and active mode are supported, although all sockets are initialized as passive.
TCP transport The TCP transport is a thin wrapper around gen_tcp.
@@ -555,10 +555,10 @@ Ranch depends on ssl by default so any necessary dependencies will start when Ra
<item>
<title>Transports</title>
- <link>https://ninenines.eu/docs/en/ranch/1.8/guide/transports/</link>
+ <link>https://ninenines.eu/docs/en/ranch/2.0/guide/transports/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.8/guide/transports/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/2.0/guide/transports/</guid>
<description>A transport defines the interface to interact with a socket.
Transports can be used for connecting, listening and accepting connections, but also for receiving and sending data. Both passive and active mode are supported, although all sockets are initialized as passive.
TCP transport The TCP transport is a thin wrapper around gen_tcp.
@@ -568,10 +568,10 @@ Ranch depends on ssl by default so any necessary dependencies will start when Ra
<item>
<title>Transports</title>
- <link>https://ninenines.eu/docs/en/ranch/2.0/guide/transports/</link>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/transports/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/2.0/guide/transports/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/transports/</guid>
<description>A transport defines the interface to interact with a socket.
Transports can be used for connecting, listening and accepting connections, but also for receiving and sending data. Both passive and active mode are supported, although all sockets are initialized as passive.
TCP transport The TCP transport is a thin wrapper around gen_tcp.
@@ -636,16 +636,6 @@ A Gun connection is an Erlang process that manages a socket to a remote endpoint
<item>
<title>Protocols</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/protocols/</link>
- <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
-
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/protocols/</guid>
- <description>A protocol handler starts a connection process and defines the protocol logic executed in this process.
-Writing a protocol handler All protocol handlers must implement the ranch_protocol behavior which defines a single callback, start_link/4. This callback is responsible for spawning a new process for handling the connection. It receives four arguments: the name of the listener, the socket, the transport handler being used and the protocol options defined in the call to ranch:start_listener/5.</description>
- </item>
-
- <item>
- <title>Protocols</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/guide/protocols/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -685,6 +675,16 @@ Writing a protocol handler All protocol handlers must implement the ranch_protoc
</item>
<item>
+ <title>Protocols</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/protocols/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/protocols/</guid>
+ <description>A protocol handler starts a connection process and defines the protocol logic executed in this process.
+Writing a protocol handler All protocol handlers must implement the ranch_protocol behavior which defines a single callback, start_link/3. This callback is responsible for spawning a new process for handling the connection. It receives three arguments: the name of the listener, the transport handler being used and the protocol options defined in the call to ranch:start_listener/5.</description>
+ </item>
+
+ <item>
<title>Getting started</title>
<link>https://ninenines.eu/docs/en/cowboy/2.4/guide/getting_started/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -806,16 +806,6 @@ Streams can be canceled at any time.</description>
<item>
<title>Embedded mode</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/embedded/</link>
- <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
-
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/embedded/</guid>
- <description>Embedded mode allows you to insert Ranch listeners directly in your supervision tree. This allows for greater fault tolerance control by permitting the shutdown of a listener due to the failure of another part of the application and vice versa.
-Embedding To embed Ranch in your application you can simply add the child specs to your supervision tree. This can all be done in the init/1 function of one of your application supervisors.</description>
- </item>
-
- <item>
- <title>Embedded mode</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/guide/embedded/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -855,6 +845,16 @@ However, just as for non-embedded listeners that were started via ranch:start_li
</item>
<item>
+ <title>Embedded mode</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/embedded/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/embedded/</guid>
+ <description>Embedded mode allows you to insert Ranch listeners directly in your supervision tree. This allows for greater fault tolerance control by permitting the shutdown of a listener due to the failure of another part of the application and vice versa.
+However, just as for non-embedded listeners that were started via ranch:start_listener/5, it is required that the ranch application is running before you can start embedded listeners. Furthermore, this also means that embedded listeners will restart when ranch_sup fails.</description>
+ </item>
+
+ <item>
<title>Flow diagram</title>
<link>https://ninenines.eu/docs/en/cowboy/2.4/guide/flow_diagram/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -983,10 +983,10 @@ You must use the gun:ws_upgrade/2,3,4 function to upgrade to Websocket.</descrip
<item>
<title>Writing parsers</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/parsers/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.6/guide/parsers/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/parsers/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.6/guide/parsers/</guid>
<description>There are three kinds of protocols:
Text protocols Schema-less binary protocols Schema-based binary protocols This chapter introduces the first two kinds. It will not cover more advanced topics such as continuations or parser generators.
This chapter isn&amp;apos;t specifically about Ranch, we assume here that you know how to read data from the socket. The data you read and the data that hasn&amp;apos;t been parsed is saved in a buffer.</description>
@@ -994,10 +994,10 @@ This chapter isn&amp;apos;t specifically about Ranch, we assume here that you kn
<item>
<title>Writing parsers</title>
- <link>https://ninenines.eu/docs/en/ranch/1.6/guide/parsers/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.7/guide/parsers/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.6/guide/parsers/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.7/guide/parsers/</guid>
<description>There are three kinds of protocols:
Text protocols Schema-less binary protocols Schema-based binary protocols This chapter introduces the first two kinds. It will not cover more advanced topics such as continuations or parser generators.
This chapter isn&amp;apos;t specifically about Ranch, we assume here that you know how to read data from the socket. The data you read and the data that hasn&amp;apos;t been parsed is saved in a buffer.</description>
@@ -1005,10 +1005,10 @@ This chapter isn&amp;apos;t specifically about Ranch, we assume here that you kn
<item>
<title>Writing parsers</title>
- <link>https://ninenines.eu/docs/en/ranch/1.7/guide/parsers/</link>
+ <link>https://ninenines.eu/docs/en/ranch/1.8/guide/parsers/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.7/guide/parsers/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/1.8/guide/parsers/</guid>
<description>There are three kinds of protocols:
Text protocols Schema-less binary protocols Schema-based binary protocols This chapter introduces the first two kinds. It will not cover more advanced topics such as continuations or parser generators.
This chapter isn&amp;apos;t specifically about Ranch, we assume here that you know how to read data from the socket. The data you read and the data that hasn&amp;apos;t been parsed is saved in a buffer.</description>
@@ -1016,10 +1016,10 @@ This chapter isn&amp;apos;t specifically about Ranch, we assume here that you kn
<item>
<title>Writing parsers</title>
- <link>https://ninenines.eu/docs/en/ranch/1.8/guide/parsers/</link>
+ <link>https://ninenines.eu/docs/en/ranch/2.0/guide/parsers/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.8/guide/parsers/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/2.0/guide/parsers/</guid>
<description>There are three kinds of protocols:
Text protocols Schema-less binary protocols Schema-based binary protocols This chapter introduces the first two kinds. It will not cover more advanced topics such as continuations or parser generators.
This chapter isn&amp;apos;t specifically about Ranch, we assume here that you know how to read data from the socket. The data you read and the data that hasn&amp;apos;t been parsed is saved in a buffer.</description>
@@ -1027,10 +1027,10 @@ This chapter isn&amp;apos;t specifically about Ranch, we assume here that you kn
<item>
<title>Writing parsers</title>
- <link>https://ninenines.eu/docs/en/ranch/2.0/guide/parsers/</link>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/parsers/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/2.0/guide/parsers/</guid>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/parsers/</guid>
<description>There are three kinds of protocols:
Text protocols Schema-less binary protocols Schema-based binary protocols This chapter introduces the first two kinds. It will not cover more advanced topics such as continuations or parser generators.
This chapter isn&amp;apos;t specifically about Ranch, we assume here that you know how to read data from the socket. The data you read and the data that hasn&amp;apos;t been parsed is saved in a buffer.</description>
@@ -1145,16 +1145,6 @@ Cowboy provides two types of listeners: one listening for clear TCP connections,
<item>
<title>SSL client authentication</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/ssl_auth/</link>
- <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
-
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/ssl_auth/</guid>
- <description>Purpose SSL client authentication is a mechanism allowing applications to identify certificates. This allows your application to make sure that the client is an authorized certificate, but makes no claim about whether the user can be trusted. This can be combined with a password based authentication to attain greater security.
-The server only needs to retain the certificate serial number and the certificate issuer to authenticate the certificate. Together, they can be used to uniquely identify a certicate.</description>
- </item>
-
- <item>
- <title>SSL client authentication</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/guide/ssl_auth/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -1194,6 +1184,16 @@ The server only needs to retain the certificate serial number and the certificat
</item>
<item>
+ <title>SSL client authentication</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/ssl_auth/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/ssl_auth/</guid>
+ <description>Purpose SSL client authentication is a mechanism allowing applications to identify certificates. This allows your application to make sure that the client is an authorized certificate, but makes no claim about whether the user can be trusted. This can be combined with a password based authentication to attain greater security.
+The server only needs to retain the certificate serial number and the certificate issuer to authenticate the certificate. Together, they can be used to uniquely identify a certificate.</description>
+ </item>
+
+ <item>
<title>Routing</title>
<link>https://ninenines.eu/docs/en/cowboy/2.4/guide/routing/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -1276,13 +1276,13 @@ For this purpose, you should first suspend the listener you wish to stop gracefu
</item>
<item>
- <title>Internals</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/internals/</link>
+ <title>Connection draining</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/connection_draining/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/internals/</guid>
- <description>This chapter may not apply to embedded Ranch as embedding allows you to use an architecture specific to your application, which may or may not be compatible with the description of the Ranch application.
-Note that for everything related to efficiency and performance, you should perform the benchmarks yourself to get the numbers that matter to you. Generic benchmarks found on the web may or may not be of use to you, you can never know until you benchmark your own system.</description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/connection_draining/</guid>
+ <description>Stopping a Ranch listener via ranch:stop_listener/1 will invariably kill all connection processes the listener hosts. However, you may want to stop a listener in a graceful fashion, ie by not accepting any new connections, but allowing the existing connection processes to exit by themselves instead of being killed.
+For this purpose, you should first suspend the listener you wish to stop gracefully, and then wait for its connection count to drop to zero.</description>
</item>
<item>
@@ -1458,6 +1458,16 @@ Note that for everything related to efficiency and performance, you should perfo
</item>
<item>
+ <title>Internals</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/internals/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/internals/</guid>
+ <description>This chapter may not apply to embedded Ranch as embedding allows you to use an architecture specific to your application, which may or may not be compatible with the description of the Ranch application.
+Note that for everything related to efficiency and performance, you should perform the benchmarks yourself to get the numbers that matter to you. Generic benchmarks found on the web may or may not be of use to you, you can never know until you benchmark your own system.</description>
+ </item>
+
+ <item>
<title>Migrating from Gun 1.1 to 1.2</title>
<link>https://ninenines.eu/docs/en/gun/1.3/guide/migrating_from_1.1/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -1566,6 +1576,18 @@ Ranch 1.x had a bottleneck because it used only a single connection supervisor.
</item>
<item>
+ <title>Migrating from Ranch 2.0 to Ranch 2.1</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_2.0/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_2.0/</guid>
+ <description>Ranch 2.1 adds counters and alarms.
+The Prometheus collector was updated to include accepted/terminated connections metrics.
+Ranch 2.1 is compatible with Erlang/OTP 22.0 onward. Support for Erlang/OTP 21 has been removed.
+Features added Metrics are now provided by ranch:info/0,1. Currently includes accepted/terminated connection counts per connection supervisor. Alarms can now be configured. The only alarm currently available is num_connections. When the number of connections goes over a configurable treshold Ranch will call the given callback.</description>
+ </item>
+
+ <item>
<title>Changes since Ranch 1.6</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/guide/migrating_from_1.6/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -1756,6 +1778,16 @@ While a third-party library already existed, it was not entirely compatible with
</item>
<item>
+ <title>Migrating from Ranch 1.7&#43; to Ranch 2.0</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.7/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.7/</guid>
+ <description>Ranch 2.0 adds support for multiple connection supervisors.
+Ranch 1.x had a bottleneck because it used only a single connection supervisor. This was more evident when many connections were dropped at once as the supervisor couldn&amp;apos;t keep up and failed to accept new connections while cleaning up the old ones. Ranch 2.0 behaves much better in this scenario by default. Multiple connection supervisors also helps with concurrently accepting new connections.</description>
+ </item>
+
+ <item>
<title>Migrating from Ranch 1.5 to 1.6</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/guide/migrating_from_1.5/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -1876,6 +1908,17 @@ Features added Listeners can now be suspended/resumed without stopping existing
</item>
<item>
+ <title>Migrating from Ranch 1.6 to 1.7</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.6/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.6/</guid>
+ <description>Ranch 1.7 adds built-in support for the PROXY protocol.
+The PROXY protocol is a simple and efficient way for proxies to transmit information about the client.
+While a third-party library already existed, it was not entirely compatible with the Ranch interface, in particular when socket active mode was involved. This new implementation fixes that and supports the full protocol with as little overhead as possible compared to normal operations: just one extra function call.</description>
+ </item>
+
+ <item>
<title>Migrating from Ranch 1.5 to 1.6</title>
<link>https://ninenines.eu/docs/en/ranch/1.7/guide/migrating_from_1.5/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -2052,6 +2095,17 @@ While only one response is allowed for every request, HTTP/2 introduced a mechan
</item>
<item>
+ <title>Migrating from Ranch 1.5 to 1.6</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.5/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.5/</guid>
+ <description>Ranch 1.6 added the ability to suspend and resume listeners. It also deprecates a number of features and add interfaces that will be used in Ranch 2.0.
+Ranch 1.6 is compatible with Erlang/OTP 18.0 onward. Support for older releases has been removed.
+Features added Listeners can now be suspended/resumed without stopping existing connection processes. This effectively closes the listening socket and stops the acceptor processes. Transport options can now be updated for suspended listeners.</description>
+ </item>
+
+ <item>
<title>Migrating from Ranch 1.x</title>
<link>https://ninenines.eu/docs/en/ranch/2.0/guide/migrating_from_1.x/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -2208,6 +2262,16 @@ In the context of HTTP, multipart is most often used with the multipart/form-dat
</item>
<item>
+ <title>Migrating from Ranch 1.x</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.x/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.x/</guid>
+ <description>The changelog for Ranch releases before 1.6 can be found in this section.
+1.5.0 Add transport functions getopts/2, getstat/1 and getstat/2 Fix ranch:info/0 and ranch:procs/2 in embedded mode Prevent ranch_conns_sup from stopping on unexpected messages 1.4.0 Add new transport option num_acceptor Deprecate ranch:start_listener/6 in favor of start_listener/5 Deprecate ranch:child_spec/6 in favor of child_spec/5 1.3.0 The version numbers 1.3.1 and 1.3.2 were later made to fix small mistakes made during the 1.</description>
+ </item>
+
+ <item>
<title>REST principles</title>
<link>https://ninenines.eu/docs/en/cowboy/2.4/guide/rest_principles/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -3281,6 +3345,17 @@ HTTP IANA Registries HTTP Method Registry HTTP Status Code Registry Message He
</item>
<item>
+ <title>Ranch 2.1</title>
+ <link>https://ninenines.eu/articles/ranch-2.1.0/</link>
+ <pubDate>Thu, 09 Sep 2021 07:00:00 +0100</pubDate>
+
+ <guid>https://ninenines.eu/articles/ranch-2.1.0/</guid>
+ <description>Ranch 2.1.0 has been released!
+Ranch 2.1 adds counters for the number of connections accepted and terminated. They can be used to produce information about accept or shutdown rates or as a total number of connections handled by Ranch.
+Ranch 2.1 also adds an alarm around the number of active connections a connection supervisor handles. When that number is high it is now possible to automatically perform an action, such as logging or gracefully shutting down idle connections.</description>
+ </item>
+
+ <item>
<title>Cowboy 2.9</title>
<link>https://ninenines.eu/articles/cowboy-2.9.0/</link>
<pubDate>Wed, 12 May 2021 07:00:00 +0100</pubDate>
@@ -11989,15 +12064,6 @@ Description This chapter aims to list all HTTP status codes that Cowboy may retu
<item>
<title>Ranch Function Reference</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/manual/</link>
- <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
-
- <guid>https://ninenines.eu/docs/en/ranch/1.5/manual/</guid>
- <description>ranch(7) ranch(3) ranch_protocol(3) ranch_ssl(3) ranch_tcp(3) ranch_transport(3) </description>
- </item>
-
- <item>
- <title>Ranch Function Reference</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12053,12 +12119,17 @@ ranch_ssl(3) - SSL transport ranch_tcp(3) - TCP transport Behaviors:</descrip
</item>
<item>
- <title>Ranch User Guide</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/guide/</link>
+ <title>Ranch Function Reference</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/guide/</guid>
- <description>Introduction Listeners Transports Protocols Embedded mode Writing parsers SSL client authentication Internals </description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/</guid>
+ <description>Name ranch - Socket acceptor pool for TCP protocols
+Description Ranch is a socket acceptor pool for TCP protocols.
+Ranch manages listeners which are a set of processes that accept and manage connections. The connection&amp;apos;s transport and protocol modules are configured per listener. Listeners can be inspected and reconfigured without interruptions in service.
+Modules Functions:
+ranch(3) - Socket acceptor pool ranch_proxy_header(3) - PROXY protocol Transports:
+ranch_ssl(3) - SSL transport ranch_tcp(3) - TCP transport Behaviors:</description>
</item>
<item>
@@ -12098,16 +12169,12 @@ ranch_ssl(3) - SSL transport ranch_tcp(3) - TCP transport Behaviors:</descrip
</item>
<item>
- <title>ranch(3)</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch/</link>
+ <title>Ranch User Guide</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/guide/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch/</guid>
- <description>Name ranch - socket acceptor pool
-Description The ranch module provides functions for starting and manipulating Ranch listeners.
-Types max_conns() = non_neg_integer() | infinity Maximum number of connections allowed on this listener.
-This is a soft limit. The actual number of connections might be slightly above the limit due to concurrency when accepting new connections. Some connections may also be removed from this count explicitly by the user code.
-opt() opt() = {ack_timeout, timeout()} | {connection_type, worker | supervisor} | {max_connections, max_conns()} | {num_acceptors, pos_integer()} | {shutdown, timeout() | brutal_kill} | {socket, any()} Ranch-specific transport options.</description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/guide/</guid>
+ <description>Interface Introduction Listeners Transports Protocols Embedded mode How to Writing parsers SSL client authentication Connection draining Advanced Internals Additional information Migrating from Ranch 2.0 to 2.1 Migrating from Ranch 1.7 to 2.0 Migrating from Ranch 1.6 to 1.7 Migrating from Ranch 1.5 to 1.6 Migrating from Ranch 1.x </description>
</item>
<item>
@@ -12167,16 +12234,17 @@ ranch:handshake(3) - Perform the transport handshake ranch:handshake_continue(3
</item>
<item>
- <title>ranch(7)</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_app/</link>
+ <title>ranch(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_app/</guid>
- <description>Name ranch - Socket acceptor pool for TCP protocols.
-Dependencies The ranch application depends on the ssl application to start. It is used for handling secure connections, when the transport is ranch_ssl. It can be disabled if SSL is not used.
-Environment The ranch application defines one application environment configuration parameter.
-profile (false) When enabled, Ranch will start eprof profiling automatically.
- You can use the ranch_app:profile_output/0 function to stop profiling and output the results to the files procs.</description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch/</guid>
+ <description>Name ranch - Socket acceptor pool
+Description The module ranch provides functions for starting and manipulating Ranch listeners.
+Exports Start/stop:
+ranch:start_listener(3) - Start a listener ranch:stop_listener(3) - Stop a listener ranch:child_spec(3) - Build child specifications for a new listener Suspend/resume:
+ranch:suspend_listener(3) - Suspend a running listener ranch:resume_listener(3) - Resume a suspended listener ranch:get_status(3) - Get a listener&amp;apos;s running state Connections:
+ranch:handshake(3) - Perform the transport handshake ranch:handshake_continue(3) - Resume the paused transport handshake ranch:handshake_cancel(3) - Cancel the paused transport handshake ranch:recv_proxy_header(3) - Receive the PROXY protocol header ranch:remove_connection(3) - Remove connection from the count Options:</description>
</item>
<item>
@@ -12236,6 +12304,20 @@ ranch_ssl(3) - SSL transport ranch_tcp(3) - TCP transport Behaviors:</descrip
</item>
<item>
+ <title>ranch(7)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_app/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_app/</guid>
+ <description>Name ranch - Socket acceptor pool for TCP protocols
+Description Ranch is a socket acceptor pool for TCP protocols.
+Ranch manages listeners which are a set of processes that accept and manage connections. The connection&amp;apos;s transport and protocol modules are configured per listener. Listeners can be inspected and reconfigured without interruptions in service.
+Modules Functions:
+ranch(3) - Socket acceptor pool ranch_proxy_header(3) - PROXY protocol Transports:
+ranch_ssl(3) - SSL transport ranch_tcp(3) - TCP transport Behaviors:</description>
+ </item>
+
+ <item>
<title>ranch:child_spec(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.child_spec/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12284,6 +12366,18 @@ Arguments Ref The listener name is used to refer to this listener in future call
</item>
<item>
+ <title>ranch:child_spec(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.child_spec/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.child_spec/</guid>
+ <description>Name ranch:child_spec - Build child specifications for a new listener
+Description child_spec(Ref :: ranch_ref(), Transport :: module(), TransOpts :: ranch:opts(), Protocol :: module(), ProtoOpts :: any()) -&amp;gt; supervisor:child_spec() Build child specifications for a new listener which can be embedded directly in an application&amp;apos;s supervision tree.
+The actual listener is placed under a supervisor which monitors ranch_server via a proxy process and will restart the listener if ranch_server crashes.
+Arguments Ref The listener name is used to refer to this listener in future calls, for example when updating the configuration.</description>
+ </item>
+
+ <item>
<title>ranch:get_addr(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_addr/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12338,6 +12432,18 @@ Arguments Ref The listener name.
</item>
<item>
+ <title>ranch:get_addr(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_addr/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_addr/</guid>
+ <description>Name ranch:get_addr - Get the listening address
+Description get_addr(Ref :: ranch:ref()) -&amp;gt; {IP :: inet:ip_address(), Port :: inet:port_number()} | {local, SocketFile :: binary()} | {undefined, undefined} Get the listening address.
+Arguments Ref The listener name.
+ Return value The address of the listener is returned as a tuple of the form {IP, Port} when listening on a network interface, or {local, SocketFile} when listening on a UNIX Domain socket.</description>
+ </item>
+
+ <item>
<title>ranch:get_max_connections(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_max_connections/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12390,6 +12496,19 @@ Changelog 2.0: The maximum number of connections is now per connection superviso
</item>
<item>
+ <title>ranch:get_max_connections(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_max_connections/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_max_connections/</guid>
+ <description>Name ranch:get_max_connections - Get the max number of connections per connection supervisor
+Description get_max_connections(Ref :: ranch:ref()) -&amp;gt; MaxConns :: ranch:max_conns() Get the max number of connections per connection supervisor.
+Arguments Ref The listener name.
+ Return value The maximum number of connections per connection supervisor is returned.
+Changelog 2.0: The maximum number of connections is now per connection supervisor. Examples Get the max number of connections per connection supervisor MaxConns = ranch:get_max_connections(example).</description>
+ </item>
+
+ <item>
<title>ranch:get_port(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_port/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12446,6 +12565,20 @@ When the listener is suspended or using a UNIX Domain socket instead of a networ
</item>
<item>
+ <title>ranch:get_port(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_port/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_port/</guid>
+ <description>Name ranch:get_port - Get the listening port
+Description get_port(Ref :: ranch:ref()) -&amp;gt; Port :: inet:port_number() | undefined Get the listening port.
+This function is particularly useful to retrieve the listening port number when it was not provided in the options and was chosen randomly instead.
+Arguments Ref The listener name.
+ Return value The listening port is returned.
+When the listener is suspended or using a UNIX Domain socket instead of a network interface, undefined will be returned.</description>
+ </item>
+
+ <item>
<title>ranch:get_protocol_options(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_protocol_options/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12498,6 +12631,19 @@ Examples Get the current protocol options ProtoOpts = ranch:get_protocol_options
</item>
<item>
+ <title>ranch:get_protocol_options(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_protocol_options/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_protocol_options/</guid>
+ <description>Name ranch:get_protocol_options - Get the current protocol options
+Description get_protocol_options(Ref :: ranch:ref()) -&amp;gt; ProtoOpts :: any() Get the current protocol options.
+Arguments Ref The listener name.
+ Return value The current protocol options are returned.
+Examples Get the current protocol options ProtoOpts = ranch:get_protocol_options(example). See also ranch:get_max_connections(3), ranch:get_transport_options(3), ranch:set_protocol_options(3), ranch(3)</description>
+ </item>
+
+ <item>
<title>ranch:get_status(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_status/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12550,6 +12696,19 @@ Changelog 1.6: Function introduced. Examples Get a listener&amp;apos;s running
</item>
<item>
+ <title>ranch:get_status(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_status/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_status/</guid>
+ <description>Name ranch:get_status - Get a listener&amp;apos;s running state
+Description get_status(Ref :: ranch_ref()) -&amp;gt; running | suspended Get a listener&amp;apos;s running state.
+Arguments Ref The listener name.
+ Return value An atom is returned indicating the running status of the listener.
+Changelog 1.6: Function introduced. Examples Get a listener&amp;apos;s running state ranch:get_status(example). See also ranch:start_listener(3), ranch:stop_listener(3), ranch:suspend_listener(3), ranch:resume_listener(3), ranch:set_transport_options(3), ranch:wait_for_connections(3), ranch(3)</description>
+ </item>
+
+ <item>
<title>ranch:get_transport_options(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_transport_options/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12602,6 +12761,19 @@ Examples Get the current transport options TransOpts = ranch:get_transport_optio
</item>
<item>
+ <title>ranch:get_transport_options(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_transport_options/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_transport_options/</guid>
+ <description>Name ranch:get_transport_options - Get the current transport options
+Description get_transport_options(Ref :: ranch:ref()) -&amp;gt; TransOpts :: ranch:transport_opts(any()) Get the current transport options.
+Arguments Ref The listener name.
+ Return value The current transport options are returned.
+Examples Get the current transport options TransOpts = ranch:get_transport_options(example). See also ranch:get_max_connections(3), ranch:get_protocol_options(3), ranch:set_transport_options(3), ranch(3)</description>
+ </item>
+
+ <item>
<title>ranch:handshake(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.handshake/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12646,6 +12818,17 @@ This function must be called by the protocol process in order to retrieve the so
</item>
<item>
+ <title>ranch:handshake(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.handshake/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.handshake/</guid>
+ <description>Name ranch:handshake - Perform the transport handshake
+Description handshake(Ref) -&amp;gt; {ok, Socket} | {continue, Info} handshake(Ref, Opts) -&amp;gt; {ok, Socket} | {continue, Info} Ref :: ranch:ref() Opts :: any() Socket :: any() Info :: any() Perform the transport handshake.
+This function must be called by the protocol process in order to retrieve the socket for the connection. Ranch performs the handshake necessary to give control of the socket to this process and also does the transport handshake, for example setting up the TLS connection.</description>
+ </item>
+
+ <item>
<title>ranch:handshake_cancel(3)</title>
<link>https://ninenines.eu/docs/en/ranch/2.0/manual/ranch.handshake_cancel/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12661,6 +12844,21 @@ Changelog 2.0: Function introduced. Examples Cancel a paused transport handsha
</item>
<item>
+ <title>ranch:handshake_cancel(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.handshake_cancel/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.handshake_cancel/</guid>
+ <description>Name ranch:handshake_cancel - Cancel the paused transport handshake
+Description handshake_cancel(Ref :: ranch:ref()) -&amp;gt; ok Cancel the paused transport handshake.
+This function may be called by the protocol process to cancel a paused handshake.
+Arguments Ref The listener name.
+Allowed options depend on the transport module.
+ Return value The return value depends on the transport module.
+Changelog 2.0: Function introduced. Examples Cancel a paused transport handshake start_link(Ref, Transport, Opts) -&amp;gt; Pid = proc_lib:spawn_link(?</description>
+ </item>
+
+ <item>
<title>ranch:handshake_continue(3)</title>
<link>https://ninenines.eu/docs/en/ranch/2.0/manual/ranch.handshake_continue/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12676,6 +12874,21 @@ Allowed options depend on the transport module.
</item>
<item>
+ <title>ranch:handshake_continue(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.handshake_continue/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.handshake_continue/</guid>
+ <description>Name ranch:handshake_continue - Resume the paused transport handshake
+Description handshake_continue(Ref) -&amp;gt; {ok, Socket} handshake_continue(Ref, Opts) -&amp;gt; {ok, Socket} Ref :: ranch:ref() Opts :: any() Socket :: any() Resume the paused transport handshake.
+This function must be called by the protocol process in order to resume a paused handshake.
+Arguments Ref The listener name.
+ Opts Transport handshake options.
+Allowed options depend on the transport module.
+ Return value An ok tuple is returned containing the socket for the connection.</description>
+ </item>
+
+ <item>
<title>ranch:info(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.info/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12736,6 +12949,21 @@ pid Pid of the listener&amp;apos;s top-level supervisor.
</item>
<item>
+ <title>ranch:info(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.info/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.info/</guid>
+ <description>Name ranch:info - Overview of Ranch listeners
+Description info() -&amp;gt; #{Ref := Info} info(Ref) -&amp;gt; Info Info :: #{Key :: atom() := Value :: any()} Overview of Ranch listeners.
+Arguments Ref The listener name.
+ Return value Returns detailed information about one or all Ranch listeners. The following keys are returned:
+pid Pid of the listener&amp;apos;s top-level supervisor.
+ status Listener status, either running or suspended.
+ ip Interface Ranch listens on.</description>
+ </item>
+
+ <item>
<title>ranch:procs(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.procs/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12792,6 +13020,20 @@ Examples Get the pids of the acceptor processes Pids = ranch:procs(acceptors).
</item>
<item>
+ <title>ranch:procs(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.procs/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.procs/</guid>
+ <description>Name ranch:procs - Retrieve pids from a listener
+Description procs(Ref :: ranch:ref(), Type :: acceptors | connections) -&amp;gt; Pids :: [pid()] Retrieve pids from a listener.
+Arguments Ref The listener name.
+ Type The type of process that will be returned.
+ Return value A list of pids is returned.
+Examples Get the pids of the acceptor processes Pids = ranch:procs(acceptors). Get the pids of the connection processes Pids = ranch:procs(connections).</description>
+ </item>
+
+ <item>
<title>ranch:recv_proxy_header(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.7/manual/ranch.recv_proxy_header/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12834,6 +13076,20 @@ Arguments Ref The listener name.
</item>
<item>
+ <title>ranch:recv_proxy_header(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.recv_proxy_header/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.recv_proxy_header/</guid>
+ <description>Name ranch:recv_proxy_header - Receive the PROXY protocol header
+Description recv_proxy_header(ranch:ref(), timeout()) -&amp;gt; {ok, ranch_proxy_header:proxy_info()} | {error, Reason :: atom()} | {error, protocol_error, HumanReadable :: atom()} Receive the PROXY protocol header.
+This function must be called before ranch:handshake/1,2 on newly accepted connections to read and parse the PROXY protocol header, if any.
+Arguments Ref The listener name.
+ Timeout Receive timeout in milliseconds.
+ Return value An ok tuple is returned containing PROXY header information on success.</description>
+ </item>
+
+ <item>
<title>ranch:remove_connection(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.remove_connection/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12882,6 +13138,18 @@ This function may only be called from a connection process.</description>
</item>
<item>
+ <title>ranch:remove_connection(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.remove_connection/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.remove_connection/</guid>
+ <description>Name ranch:remove_connection - Remove connection from the count
+Description remove_connection(Ref :: ranch:ref()) -&amp;gt; ok Remove connection from the count.
+This connection will no longer be included in the count when limiting the number of connections. This can be useful in a mixed environment where some connections are active and others are passive. Passive connections spend most of their time idling and are not consuming much resources.
+This function may only be called from a connection process.</description>
+ </item>
+
+ <item>
<title>ranch:resume_listener(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.resume_listener/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12938,6 +13206,20 @@ Arguments Ref The listener name.
</item>
<item>
+ <title>ranch:resume_listener(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.resume_listener/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.resume_listener/</guid>
+ <description>Name ranch:resume_listener - Resume a suspended listener
+Description resume_listener(Ref :: ranch_ref()) -&amp;gt; ok | {error, any()} Resume a suspended listener.
+Ranch will start listening for and accepting connections again. The function ranch:set_transport_options(3) can be used to change the transport options before resuming the listener.
+Nothing is done when the listener is already running.
+Arguments Ref The listener name.
+ Return value The atom ok is returned on success.</description>
+ </item>
+
+ <item>
<title>ranch:set_max_connections(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.set_max_connections/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -12985,6 +13267,17 @@ The change will be applied immediately. If the new value is smaller than the pre
</item>
<item>
+ <title>ranch:set_max_connections(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.set_max_connections/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.set_max_connections/</guid>
+ <description>Name ranch:set_max_connections - Set the max number of connections per connection supervisor
+Description set_max_connections(Ref :: ranch:ref(), MaxConns :: ranch:max_conns()) -&amp;gt; ok Set the max number of connections per connection supervisor.
+The change will be applied immediately. If the new value is smaller than the previous one, Ranch will wait for the extra connections to terminate and will not accept new connections until the number of connections goes below the limit.</description>
+ </item>
+
+ <item>
<title>ranch:set_protocol_options(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.set_protocol_options/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -13045,6 +13338,18 @@ Examples Set the protocol options ranch:set_protocol_options(example, ProtoOpts)
</item>
<item>
+ <title>ranch:set_protocol_options(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.set_protocol_options/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.set_protocol_options/</guid>
+ <description>Name ranch:set_protocol_options - Set the protocol options
+Description set_protocol_options(Ref :: ranch:ref(), ProtoOpts :: any()) -&amp;gt; ok Set the protocol options.
+The change will be applied immediately for all new connections. Old connections will not receive the new options.
+Note that the complete set of protocol options is replaced. To update a subset of the options, it is recommended to get the current protocol options using ranch:get_protocol_options(3), update them and then set them back using this function.</description>
+ </item>
+
+ <item>
<title>ranch:set_transport_options(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.set_transport_options/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -13102,6 +13407,18 @@ immediately: max_connections handshake_timeout shutdown only after the list
</item>
<item>
+ <title>ranch:set_transport_options(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.set_transport_options/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.set_transport_options/</guid>
+ <description>Name ranch:set_transport_options - Set the transport options
+Description set_transport_options(Ref :: ranch:ref(), TransOpts :: ranch:opts()) -&amp;gt; ok | {error, Reason :: term()} Set the transport options.
+The complete set of transport options is replaced. To update a subset of the transport options, it is recommended to get the current transport options using ranch:get_transport_options(3), update them and then set them back using this function.
+Changes to the following options will take effect.</description>
+ </item>
+
+ <item>
<title>ranch:start_listener(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.start_listener/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -13150,6 +13467,18 @@ Arguments Ref The listener name is used to refer to this listener in future call
</item>
<item>
+ <title>ranch:start_listener(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.start_listener/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.start_listener/</guid>
+ <description>Name ranch:start_listener - Start a listener
+Description start_listener(Ref :: ranch_ref(), Transport :: module(), TransOpts :: ranch:opts(), Protocol :: module(), ProtoOpts :: any()) -&amp;gt; {ok, ListenerPid :: pid()} | {error, any()} Start a listener.
+A listener is a set of processes that accepts and manages connections using the given transport and protocol modules.
+Arguments Ref The listener name is used to refer to this listener in future calls, for example when stopping it or when updating the configuration.</description>
+ </item>
+
+ <item>
<title>ranch:stop_listener(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.stop_listener/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -13198,6 +13527,18 @@ In order for the connection processes to exit gracefully, they need to trap exit
</item>
<item>
+ <title>ranch:stop_listener(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.stop_listener/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.stop_listener/</guid>
+ <description>Name ranch:stop_listener - Stop a listener
+Description stop_listener(Ref :: ranch_ref()) -&amp;gt; ok | {error, not_found} Stop a listener.
+The listener is stopped gracefully, first by closing the listening port, then by stopping the connection processes. These processes are stopped according to the shutdown transport option, which may be set to brutally kill all connection processes or give them some time to stop properly.
+In order for the connection processes to exit gracefully, they need to trap exit signals and stop before the configured shutdown timeout.</description>
+ </item>
+
+ <item>
<title>ranch:suspend_listener(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.suspend_listener/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -13246,6 +13587,18 @@ Some transport options can only be changed when the listener is suspended. Pleas
</item>
<item>
+ <title>ranch:suspend_listener(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.suspend_listener/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.suspend_listener/</guid>
+ <description>Name ranch:suspend_listener - Suspend a running listener
+Description suspend_listener(Ref :: ranch_ref()) -&amp;gt; ok | {error, any()} Suspend a running listener.
+Ranch will stop listening for and accepting connections and the listening socket will be closed. Existing connections will continue undisturbed. The function ranch:wait_for_connections(3) can be used to wait for connections to be closed if necessary.
+Some transport options can only be changed when the listener is suspended. Please consult the ranch:set_transport_options(3) manual for more information.</description>
+ </item>
+
+ <item>
<title>ranch:wait_for_connections(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.wait_for_connections/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -13294,19 +13647,15 @@ This function can be used to gracefully shutdown a listener by first suspending
</item>
<item>
- <title>ranch_protocol(3)</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_protocol/</link>
+ <title>ranch:wait_for_connections(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.wait_for_connections/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_protocol/</guid>
- <description>Name ranch_protocol - behaviour for protocol modules
-Description The ranch_protocol behaviour defines the interface used by Ranch protocols.
-Types None.
-Callbacks start_link(Ref, Socket, Transport, ProtoOpts) -&amp;gt; {ok, pid()} | {ok, pid(), pid()} Ref = ranch:ref() Listener name.
- Socket = any() Socket for this connection.
- Transport = module() Transport module for this socket.
- ProtoOpts = any() Protocol options.
- Start a new connection process for the given socket.</description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.wait_for_connections/</guid>
+ <description>Name ranch:wait_for_connections - Wait for a specific number of connections
+Description wait_for_connections(Ref :: ranch:ref(), Operator, NumConns :: non_neg_integer()) -&amp;gt; ok Operator :: &#39;&amp;gt;&#39; | &#39;&amp;gt;=&#39; | &#39;==&#39; | &#39;=&amp;lt;&#39; | &#39;&amp;lt;&#39; Wait for a specific number of connections.
+This function waits until the number of connections on the given listener becomes higher than, equal to or lower than the given number. It never returns otherwise.
+This function can be used to gracefully shutdown a listener by first suspending the listener and then waiting for connections to terminate before finally stopping the listener.</description>
</item>
<item>
@@ -13362,6 +13711,19 @@ The only purpose of this callback is to start a process that will handle the soc
</item>
<item>
+ <title>ranch_protocol(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_protocol/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_protocol/</guid>
+ <description>Name ranch_protocol - Protocol modules
+Description The module ranch_protocol defines the interface used by Ranch protocols.
+Callbacks Ranch protocols implement the following interface:
+start_link(Ref :: ranch:ref(), Transport :: module(), ProtoOpts :: any()) -&amp;gt; {ok, ConnPid :: pid()} | {ok, SupPid :: pid(), ConnPid :: pid()} Start a new connection process.
+The only purpose of this callback is to start a process that will handle the socket. It must spawn the process, link and then return the new pid.</description>
+ </item>
+
+ <item>
<title>ranch_proxy_header(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.7/manual/ranch_proxy_header/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -13395,6 +13757,17 @@ Exports ranch_proxy_header:parse(3) - Parse a PROXY protocol header ranch_proxy
</item>
<item>
+ <title>ranch_proxy_header(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header/</guid>
+ <description>Name ranch_proxy_header - PROXY protocol
+Description The module ranch_proxy_header provides functions for parsing and building the PROXY protocol header.
+Exports ranch_proxy_header:parse(3) - Parse a PROXY protocol header ranch_proxy_header:header(3) - Build a PROXY protocol header ranch_proxy_header:to_connection_info(3) - Convert proxy_info() to ssl:connection_info() Types proxy_info() proxy_info() = #{ %% Mandatory part. version := 1 | 2, command := local | proxy, transport_family =&amp;gt; undefined | ipv4 | ipv6 | unix, transport_protocol =&amp;gt; undefined | stream | dgram, %% Addresses.</description>
+ </item>
+
+ <item>
<title>ranch_proxy_header:header(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.7/manual/ranch_proxy_header.header/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -13434,6 +13807,19 @@ Arguments ProxyInfo The proxy information to encode.
</item>
<item>
+ <title>ranch_proxy_header:header(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header.header/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header.header/</guid>
+ <description>Name ranch_proxy_header:header - Build a PROXY protocol header
+Description header(ProxyInfo) -&amp;gt; header(ProxyInfo, #{}) header(ProxyInfo, BuildOpts) -&amp;gt; iodata() ProxyInfo :: ranch_proxy_header:proxy_info() BuildOpts :: #{ checksum =&amp;gt; crc32c, padding =&amp;gt; pos_integer() %% &amp;gt;= 3 } Build a PROXY protocol header.
+Arguments ProxyInfo The proxy information to encode.
+ BuildOpts Options to control whether to add a checksum or padding should be included in the encoded PROXY protocol header.
+ Return value The PROXY protocol header is returned.</description>
+ </item>
+
+ <item>
<title>ranch_proxy_header:parse(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.7/manual/ranch_proxy_header.parse/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -13473,14 +13859,30 @@ An error tuple is returned when a protocol error is detected.</description>
</item>
<item>
- <title>ranch_ssl(3)</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_ssl/</link>
+ <title>ranch_proxy_header:parse(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header.parse/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_ssl/</guid>
- <description>Name ranch_ssl - SSL transport module
-Description The ranch_ssl module implements an SSL Ranch transport.
-Types ssl_opt() ssl_opt() = {alpn_preferred_protocols, [binary()]} | {beast_mitigation, one_n_minus_one | zero_n | disabled} | {cacertfile, string()} | {cacerts, [public_key:der_encoded()]} | {cert, public_key:der_encoded()} | {certfile, string()} | {ciphers, [ssl:erl_cipher_suite()] | string()} | {client_renegotiation, boolean()} | {crl_cache, {module(), {internal | any(), list()}}} | {crl_check, boolean() | peer | best_effort} | {depth, 0..255} | {dh, public_key:der_encoded()} | {dhfile, string()} | {fail_if_no_peer_cert, boolean()} | {hibernate_after, integer() | undefined} | {honor_cipher_order, boolean()} | {key, {&#39;RSAPrivateKey&#39; | &#39;DSAPrivateKey&#39; | &#39;PrivateKeyInfo&#39;, public_key:der_encoded()}} | {keyfile, string()} | {log_alert, boolean()} | {next_protocols_advertised, [binary()]} | {padding_check, boolean()} | {partial_chain, fun(([public_key:der_encoded()]) -&amp;gt; {trusted_ca, public_key:der_encoded()} | unknown_ca)} | {password, string()} | {psk_identity, string()} | {reuse_session, fun()} | {reuse_sessions, boolean()} | {secure_renegotiate, boolean()} | {signature_algs, [{atom(), atom()}]} | {sni_fun, fun()} | {sni_hosts, [{string(), ssl_opt()}]} | {user_lookup_fun, {fun(), any()}} | {v2_hello_compatible, boolean()} | {verify, ssl:verify_type()} | {verify_fun, {fun(), any()}} | {versions, [atom()]}.</description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header.parse/</guid>
+ <description>Name ranch_proxy_header:parse - Parse a PROXY protocol header
+Description parse(Data :: binary()) -&amp;gt; {ok, ranch_proxy_header:proxy_info(), Rest :: binary()} | {error, HumanReadable :: atom()} Parse a PROXY protocol header.
+Arguments Data The PROXY protocol header optionally followed by more data.
+ Return value An ok tuple is returned on success, containing the proxy information found in the header and the rest of the data if more was provided.
+An error tuple is returned when a protocol error is detected.</description>
+ </item>
+
+ <item>
+ <title>ranch_proxy_header:to_connection_info(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header.to_connection_info/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header.to_connection_info/</guid>
+ <description>Name ranch_proxy_header:to_connection_info - Convert proxy_info() to ssl:connection_info()
+Description to_connection_info(ProxyInfo :: proxy_info()) -&amp;gt; ssl:connection_info() Convert ranch_proxy_header:proxy_info() information to the ssl:connection_info() format returned by ssl:connection_information/1,2.
+Arguments ProxyInfo The PROXY protocol information.
+ Return value Connection information is returned as a proplist.
+Because the PROXY protocol header includes limited information, only the keys protocol, selected_cipher_suite and sni_hostname will be returned, at most. All keys are optional.
+Changelog 2.1: Function introduced. Examples Convert the PROXY protocol information ConnInfo = ranch_proxy_header:to_connection_info(ProxyInfo).</description>
</item>
<item>
@@ -13544,15 +13946,18 @@ ssl_opt() ssl_opt() = {alpn_preferred_protocols, [binary()]} | {anti_replay, &#3
</item>
<item>
- <title>ranch_tcp(3)</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_tcp/</link>
+ <title>ranch_ssl(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_ssl/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_tcp/</guid>
- <description>Name ranch_tcp - TCP transport module
-Description The ranch_tcp module implements a TCP Ranch transport.
-Note that due to bugs in OTP up to at least R16B02, it is recommended to disable async threads when using the sendfile function of this transport, as it can make the threads stuck indefinitely.
-Types opt() opt() = {backlog, non_neg_integer()} | {buffer, non_neg_integer()} | {delay_send, boolean()} | {dontroute, boolean()} | {exit_on_close, boolean()} | {fd, non_neg_integer()} | {high_msgq_watermark, non_neg_integer()} | {high_watermark, non_neg_integer()} | inet | inet6 | {ip, inet:ip_address()} | {ipv6_v6only, boolean()} | {keepalive, boolean()} | {linger, {boolean(), non_neg_integer()}} | {low_msgq_watermark, non_neg_integer()} | {low_watermark, non_neg_integer()} | {nodelay, boolean()} | {port, inet:port_number()} | {priority, integer()} | {raw, non_neg_integer(), non_neg_integer(), binary()} | {recbuf, non_neg_integer()} | {send_timeout, timeout()} | {send_timeout_close, boolean()} | {sndbuf, non_neg_integer()} | {tos, integer()} Listen options.</description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_ssl/</guid>
+ <description>Name ranch_ssl - SSL transport
+Description The module ranch_ssl implements an SSL Ranch transport.
+Exports The module ranch_ssl implements the interface defined by ranch_transport(3).
+Types opt() opt() :: ranch_tcp:opt() | ssl_opt() Listen options.
+The TCP options are defined in ranch_tcp(3).
+opts() opts() :: [opt()] List of listen options.
+ssl_opt() ssl_opt() = {alpn_preferred_protocols, [binary()]} | {anti_replay, &#39;10k&#39; | &#39;100k&#39; | {integer(), integer(), integer()}} | {beast_mitigation, one_n_minus_one | zero_n | disabled} | {cacertfile, file:filename()} | {cacerts, [public_key:der_encoded()]} | {cert, public_key:der_encoded()} | {certfile, file:filename()} | {ciphers, ssl:ciphers()} | {client_renegotiation, boolean()} | {crl_cache, [any()]} | {crl_check, boolean() | peer | best_effort} | {depth, integer()} | {dh, binary()} | {dhfile, file:filename()} | {eccs, [ssl:named_curve()]} | {fail_if_no_peer_cert, boolean()} | {handshake, hello | full} | {hibernate_after, timeout()} | {honor_cipher_order, boolean()} | {honor_ecc_order, boolean()} | {key, ssl:key()} | {key_update_at, pos_integer()} | {keyfile, file:filename()} | {log_alert, boolean()} | {log_level, logger:level()} | {max_handshake_size, integer()} | {middlebox_comp_mode, boolean()} | {next_protocols_advertised, [binary()]} | {padding_check, boolean()} | {partial_chain, fun()} | {password, string()} | {protocol, tls | dtls} | {psk_identity, string()} | {reuse_session, fun()} | {reuse_sessions, boolean()} | {secure_renegotiate, boolean()} | {session_tickets, disabled | stateful | stateless} | {signature_algs, [{ssl:hash(), ssl:sign_algo()}]} | {signature_algs_cert, [ssl:sign_scheme()]} | {sni_fun, fun()} | {sni_hosts, [{string(), ssl_opt()}]} | {supported_groups, [ssl:group()]} | {user_lookup_fun, {fun(), any()}} | {verify, verify_none | verify_peer} | {verify_fun, {fun(), any()}} | {versions, [ssl:protocol_version()]} SSL-specific listen options.</description>
</item>
<item>
@@ -13608,18 +14013,16 @@ Types opt() opt() = {backlog, non_neg_integer()} | {buffer, non_neg_integer()} |
</item>
<item>
- <title>ranch_transport(3)</title>
- <link>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_transport/</link>
+ <title>ranch_tcp(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_tcp/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
- <guid>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_transport/</guid>
- <description>Name ranch_transport - behaviour for transport modules
-Description The ranch_transport behaviour defines the interface used by Ranch transports.
-Types sendfile_opts() = [{chunk_size, non_neg_integer()}] Options used by the sendfile function and callbacks.
-Allows configuring the chunk size, in bytes. Defaults to 8191 bytes.
-Callbacks accept(LSocket, Timeout) -&amp;gt; {ok, CSocket} | {error, closed | timeout | atom()} LSocket = CSocket = any() Listening socket.
- Timeout = timeout() Accept timeout.
- Accept a connection on the given listening socket.</description>
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_tcp/</guid>
+ <description>Name ranch_tcp - TCP transport
+Description The module ranch_tcp implements a TCP Ranch transport.
+The function sendfile may not work correctly when used against files stored in a VirtualBox shared folder.
+Exports The module ranch_tcp implements the interface defined by ranch_transport(3).
+Types opt() opt() = {backlog, non_neg_integer()} | {buffer, non_neg_integer()} | {delay_send, boolean()} | {dontroute, boolean()} | {exit_on_close, boolean()} | {fd, non_neg_integer()} | {high_msgq_watermark, non_neg_integer()} | {high_watermark, non_neg_integer()} | inet | inet6 | {ip, inet:ip_address() | inet:local_address()} | {ipv6_v6only, boolean()} | {keepalive, boolean()} | {linger, {boolean(), non_neg_integer()}} | {low_msgq_watermark, non_neg_integer()} | {low_watermark, non_neg_integer()} | {nodelay, boolean()} | {port, inet:port_number()} | {priority, integer()} | {raw, non_neg_integer(), non_neg_integer(), binary()} | {recbuf, non_neg_integer()} | {send_timeout, timeout()} | {send_timeout_close, boolean()} | {sndbuf, non_neg_integer()} | {tos, integer()} Listen options.</description>
</item>
<item>
@@ -13675,6 +14078,19 @@ close close(Socket :: socket()) -&amp;gt; ok Close the socket.</description>
</item>
<item>
+ <title>ranch_transport(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_transport/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_transport/</guid>
+ <description>Name ranch_transport - Transport modules
+Description The module ranch_transport defines the interface used by Ranch transports.
+Callbacks Ranch transports implement the following interface:
+accept accept(LSocket :: socket(), Timeout :: timeout()) -&amp;gt; {ok, Socket :: socket()} | {error, closed | timeout | atom()} Use the listening socket returned by listen/1 to accept a new connection. The timeout is specified in milliseconds.
+close close(Socket :: socket()) -&amp;gt; ok Close the socket.</description>
+ </item>
+
+ <item>
<title>ranch_transport:sendfile(3)</title>
<link>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch_transport.sendfile/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
@@ -13722,5 +14138,17 @@ The file may be sent full or in parts, and may be specified by its filename or b
This function emulates the function file:sendfile/2,4,5 and may be used when transports are not manipulating TCP directly.</description>
</item>
+ <item>
+ <title>ranch_transport:sendfile(3)</title>
+ <link>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_transport.sendfile/</link>
+ <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+
+ <guid>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_transport.sendfile/</guid>
+ <description>Name ranch_transport:sendfile - Send a file on the socket
+Description sendfile(Transport :: module(), Socket :: ranch_transport:socket(), File :: file:name_all() | file:fd(), Offset :: non_neg_integer(), Bytes :: non_neg_integer(), Opts :: ranch_transport:sendfile_opts()) -&amp;gt; {ok, SentBytes :: non_neg_integer()} | {error, atom()} Send a file on the socket.
+The file may be sent full or in parts, and may be specified by its filename or by an already open file descriptor.
+This function emulates the function file:sendfile/2,4,5 and may be used when transports are not manipulating TCP directly.</description>
+ </item>
+
</channel>
</rss> \ No newline at end of file
diff --git a/services/index.html b/services/index.html
index 011c749a..bf6b23b2 100644
--- a/services/index.html
+++ b/services/index.html
@@ -790,6 +790,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<h3 id="_like_my_work__donate">Like my work? Donate!</h3>
<p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline">
@@ -2413,6 +2427,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
</div>
</div>
</div>
diff --git a/sitemap.xml b/sitemap.xml
index 1e5eecb3..93b487ef 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -23,10 +23,6 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/guide/introduction/</loc>
- </url>
-
- <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/guide/introduction/</loc>
</url>
@@ -43,6 +39,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/guide/introduction/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/cowboy/2.4/guide/modern_web/</loc>
</url>
@@ -91,10 +91,6 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/guide/listeners/</loc>
- </url>
-
- <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/guide/listeners/</loc>
</url>
@@ -111,6 +107,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/guide/listeners/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/gun/1.0/guide/start/</loc>
</url>
@@ -175,10 +175,6 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/guide/transports/</loc>
- </url>
-
- <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/guide/transports/</loc>
</url>
@@ -195,6 +191,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/guide/transports/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/gun/1.0/guide/connect/</loc>
</url>
@@ -215,10 +215,6 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/guide/protocols/</loc>
- </url>
-
- <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/guide/protocols/</loc>
</url>
@@ -235,6 +231,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/guide/protocols/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/cowboy/2.4/guide/getting_started/</loc>
</url>
@@ -279,10 +279,6 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/guide/embedded/</loc>
- </url>
-
- <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/guide/embedded/</loc>
</url>
@@ -299,6 +295,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/guide/embedded/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/cowboy/2.4/guide/flow_diagram/</loc>
</url>
@@ -343,10 +343,6 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/guide/parsers/</loc>
- </url>
-
- <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/guide/parsers/</loc>
</url>
@@ -363,6 +359,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/guide/parsers/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/gun/1.3/guide/migrating_from_1.3/</loc>
</url>
@@ -403,10 +403,6 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/guide/ssl_auth/</loc>
- </url>
-
- <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/guide/ssl_auth/</loc>
</url>
@@ -423,6 +419,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/guide/ssl_auth/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/cowboy/2.4/guide/routing/</loc>
</url>
@@ -451,7 +451,7 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/guide/internals/</loc>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/guide/connection_draining/</loc>
</url>
<url>
@@ -519,6 +519,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/guide/internals/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/gun/1.3/guide/migrating_from_1.1/</loc>
</url>
@@ -555,6 +559,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_2.0/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/guide/migrating_from_1.6/</loc>
</url>
@@ -627,6 +635,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.7/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/guide/migrating_from_1.5/</loc>
</url>
@@ -671,6 +683,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.6/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.7/guide/migrating_from_1.5/</loc>
</url>
@@ -731,6 +747,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.5/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/2.0/guide/migrating_from_1.x/</loc>
</url>
@@ -791,6 +811,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/guide/migrating_from_1.x/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/cowboy/2.4/guide/rest_principles/</loc>
</url>
@@ -1200,7 +1224,12 @@
<url>
<loc>https://ninenines.eu/articles/</loc>
- <lastmod>2021-05-12T07:00:00+01:00</lastmod>
+ <lastmod>2021-09-09T07:00:00+01:00</lastmod>
+ </url>
+
+ <url>
+ <loc>https://ninenines.eu/articles/ranch-2.1.0/</loc>
+ <lastmod>2021-09-09T07:00:00+01:00</lastmod>
</url>
<url>
@@ -4104,10 +4133,6 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/manual/</loc>
- </url>
-
- <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/</loc>
</url>
@@ -4124,7 +4149,7 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/guide/</loc>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/</loc>
</url>
<url>
@@ -4144,7 +4169,7 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch/</loc>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/guide/</loc>
</url>
<url>
@@ -4164,7 +4189,7 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_app/</loc>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch/</loc>
</url>
<url>
@@ -4184,6 +4209,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_app/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.child_spec/</loc>
</url>
@@ -4200,6 +4229,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.child_spec/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_addr/</loc>
</url>
@@ -4216,6 +4249,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_addr/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_max_connections/</loc>
</url>
@@ -4232,6 +4269,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_max_connections/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_port/</loc>
</url>
@@ -4248,6 +4289,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_port/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_protocol_options/</loc>
</url>
@@ -4264,6 +4309,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_protocol_options/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_status/</loc>
</url>
@@ -4280,6 +4329,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_status/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.get_transport_options/</loc>
</url>
@@ -4296,6 +4349,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.get_transport_options/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.handshake/</loc>
</url>
@@ -4312,14 +4369,26 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.handshake/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/2.0/manual/ranch.handshake_cancel/</loc>
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.handshake_cancel/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/2.0/manual/ranch.handshake_continue/</loc>
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.handshake_continue/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.info/</loc>
</url>
@@ -4336,6 +4405,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.info/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.procs/</loc>
</url>
@@ -4352,6 +4425,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.procs/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.7/manual/ranch.recv_proxy_header/</loc>
</url>
@@ -4364,6 +4441,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.recv_proxy_header/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.remove_connection/</loc>
</url>
@@ -4380,6 +4461,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.remove_connection/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.resume_listener/</loc>
</url>
@@ -4396,6 +4481,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.resume_listener/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.set_max_connections/</loc>
</url>
@@ -4412,6 +4501,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.set_max_connections/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.set_protocol_options/</loc>
</url>
@@ -4428,6 +4521,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.set_protocol_options/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.set_transport_options/</loc>
</url>
@@ -4444,6 +4541,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.set_transport_options/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.start_listener/</loc>
</url>
@@ -4460,6 +4561,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.start_listener/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.stop_listener/</loc>
</url>
@@ -4476,6 +4581,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.stop_listener/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.suspend_listener/</loc>
</url>
@@ -4492,6 +4601,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.suspend_listener/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch.wait_for_connections/</loc>
</url>
@@ -4508,7 +4621,7 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_protocol/</loc>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch.wait_for_connections/</loc>
</url>
<url>
@@ -4528,6 +4641,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_protocol/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.7/manual/ranch_proxy_header/</loc>
</url>
@@ -4540,6 +4657,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.7/manual/ranch_proxy_header.header/</loc>
</url>
@@ -4552,6 +4673,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header.header/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.7/manual/ranch_proxy_header.parse/</loc>
</url>
@@ -4564,7 +4689,11 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_ssl/</loc>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header.parse/</loc>
+ </url>
+
+ <url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_proxy_header.to_connection_info/</loc>
</url>
<url>
@@ -4584,7 +4713,7 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_tcp/</loc>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_ssl/</loc>
</url>
<url>
@@ -4604,7 +4733,7 @@
</url>
<url>
- <loc>https://ninenines.eu/docs/en/ranch/1.5/manual/ranch_transport/</loc>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_tcp/</loc>
</url>
<url>
@@ -4624,6 +4753,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_transport/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/ranch/1.6/manual/ranch_transport.sendfile/</loc>
</url>
@@ -4640,6 +4773,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/ranch/2.1/manual/ranch_transport.sendfile/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/tags/</loc>
</url>