aboutsummaryrefslogtreecommitdiffstats
path: root/src
AgeCommit message (Collapse)Author
2020-06-25Ranch 2.0.0Loïc Hoguin
2020-04-20Delete local socket file when a listener closesjuhlig
2020-04-02Delete possibly existing socket file when listening on a local socketjuhlig
2020-03-16Change ranch_conns_sup update from supervisor to advancedjuhlig
2020-02-27Update ranch_server and ranch_server_proxy on upgradejuhlig
2020-02-21Ranch 2.0.0-rc.32.0.0-rc.3Loïc Hoguin
This tag is necessary so that the release upgrade test suite passes.
2020-02-21Stop/restart acceptors during the upgrade processLoïc Hoguin
2020-02-21Prevent side effects in init of supervisorsjuhlig
2020-02-10Properly update supervisors in the appupLoïc Hoguin
Also fix the downgrade in the test suite.
2020-02-10Update Erlang.mkLoïc Hoguin
Update the release upgrade test suite to use the appup from src/ rather than from ebin/.
2019-10-14Fix log on connection process exitchenduo
2019-10-14Enable multiple steps handshakejuhlig
Also fix some Protocol:start_link/4 into start_link/3 left over in the documentation.
2019-09-01Removed connections trigger acceptors wake-upJose M Perez
2019-08-29Remove an outdated comment in ranch_acceptors_supjuhlig
2019-07-18Return listener info as a map2.0.0-rc.1juhlig
2019-07-02Set transport options without suspendjuhlig
Lift the restriction that a listener must be suspended before transport options can be changed. * Changes to the `max_connections`, `handshake_timeout` and `shutdown` options will take effect immediately. * Changes to the `num_acceptors`, `num_listen_sockets` and `socket_opts` options will take effect when a listener is suspended and resumed, or when the acceptors supervisor restarts. * Changes to the `num_conns_sups` and `connection_type` options will only take effect when the connections super-supervisor restarts. * Changes to the `logger` option will never take effect, unless a listener is stopped and started with fresh transport options. The fetching and handing down of transport options changes with this commit, to ensure consistency between the individual components in the hierarchy. * The `num_acceptors` option is handed down from the listener supervisor to the acceptors supervisor in the child spec, while the `num_listen_sockets` and `socket_opts` options are read inside the acceptors supervisor itself. This way, the `num_acceptors` option will only take effect when the listener supervisor restarts, whereas the other two options will take effect when acceptors supervisor restarts. This commit moves the fetching of the `num_acceptors` option into the acceptors supervisor as well. * The `logger` option is read in multiple places throughout the hierarchy. This way it may happen that processes that suffered a crash and restart may use a different logger than other processes that did not. This commit reads the `logger` from the transport options given to the listener supervisor start function, and hands it down from there. * The `connection_type` option is read individually by each connection supervisor. This way, a restart of an individual connection supervisor may cause them to use a different connection type than the others. This commit reads the transport options in the connections super-supervisor, and hands them down to the individual connections supervisors. * The `num_conns_sups` is handed down from the listener supervisor to the connections super-supervisor. This way, a change to this option will only take effect when the listener supervisor restarts. This commit moves the fetching of this option inside the connections super-supervisor. This change is merely for structural consistency, it is not necessary for operational consistency.
2019-07-01Add missing specsjuhlig
2019-06-21Embedded listeners depending on ranch_serverjuhlig
2019-06-20Fix misplaced monitoring of connection supervisorjuhlig
2019-06-20Ranch leaks sockets when protocols fail to startjuhlig
When a protocol fails to start, the socket will not be closed.
2019-06-19Validate transport optionsjuhlig
2019-06-14Adaptive restart intensity for acceptor and connection supervisorsjuhlig
2019-05-27Use transport options in ranch_transport:listen/1 callbacksjuhlig
The callback `ranch_transport:listen/1` has changed to accept a map of transport options instead of socket options.
2019-05-27Update ranch_ssl:ssl_opt() to conform with OTP 22 ssljuhlig
2019-05-22Add inet:local_address() to ranch_tcp ip optionjuhlig
2019-05-18Add support for UNIX domain socketsjuhlig
It was working already but the types were wrong and some small details needed to be corrected.
2019-05-13Change supervisor child specs to mapsjuhlig
2019-05-13Fix premature ranch_server:set_addrjuhlig
With num_listen_sockets>1 and SO_REUSEPORT disabled, the startup of ranch_acceptors_sup fails because extra sockets cannot be created. Because ranch_server:set_addr is called right after the creation of the first socket succeeded, ranch:get_port etc may still return an ok tuple until it notices that the listener is in fact down.
2019-05-13Add the passive messages to ranch_transport:messages/0Loïc Hoguin
2019-05-12Properly document logger option; change default to loggerLoïc Hoguin
We now require OTP-21+ therefore there's no need to keep the default of error_logger.
2019-05-12Add experimental num_listen_sockets optionjuhlig
2019-05-09Remove Socket argument from ranch_protocol:start_linkLoïc Hoguin
2019-05-09Use ssl:handshake instead of ssl:ssl_acceptLoïc Hoguin
This makes Ranch require OTP-21+. The function ranch:accept_ack/1 was also removed in this commit.
2019-05-09Remove ranch:start_listener/6 and :child_spec/6Loïc Hoguin
2019-05-09No longer accept mix of Ranch/socket options as listLoïc Hoguin
2019-05-08Add the num_conns_sups optionjuhlig
This new option allows configuring the number of connection supervisors. The old behavior can be obtained by setting this value to 1. A value larger than num_acceptors will result in some connection supervisors not being used as the acceptors currently only use one connection supervisor.
2019-05-08Retrieve the conns_sup in the acceptor start functionjuhlig
With the resolution of the pid of a conns_sup in acceptors_sup and thus in the child spec, a crash of a conns_sup and subsequent crash of the associated acceptor causes restarts of the acceptor to fail.
2019-05-06Fix some whitespaceLoïc Hoguin
2019-05-06Create one ranch_conns_sup per num_acceptorjuhlig
This gets rid of a bottleneck that occurs when many connections are handled by a single supervisor. The bigger issue occurred when many connections were dropped at once and the supervisor couldn't keep up.
2019-04-29Remove socket optionj.uhlig
2019-04-29Fix repeated removal of connectionsjuhlig
Due to a typo, repeated calls to ranch:remove_connection/1 from a worker process would crash the respective ranch_conns_sup.
2019-03-18Fix Dialyzer warning on unknown `ssl_cipher:erl_cipher_suite/0' typeGuilherme Andrade
* Up until OTP 21.0 it was defined on the ssl_cipher[0] module * On OTP 21.1 it was moved into ssl_cipher_format[1] * On OTP 21.3 it was moved into ssl[2] [0]: https://github.com/erlang/otp/blob/OTP-21.0/lib/ssl/src/ssl_cipher.erl#L56-L60 [1]: https://github.com/erlang/otp/blob/OTP-21.1/lib/ssl/src/ssl_cipher_format.erl#L40-L44 [2]: https://github.com/erlang/otp/blob/OTP-21.3/lib/ssl/src/ssl.erl#L136-L140
2018-11-26Use the correct CRC32 algorithm for the PROXY headerLoïc Hoguin
Turns out it wasn't the plain CRC32 algorithm that should have been used, whoops! The implementation was adapted from pseudo code from Thomas Cioppettini. I've renamed the PROXY header building option value for checksum from crc32 to crc32c and updated the documentation. There is no support for plain crc32 checksums.
2018-11-14Document the PROXY-related functions; prepare 1.7.0Loïc Hoguin
2018-10-23Add ranch:recv_proxy_header/2Loïc Hoguin
This is the function that should be called regardless of TCP or TLS being used. The proper usage for this function is: {ok, ProxyInfo} = ranch:recv_proxy_header(Ref, Timeout), {ok, Socket} = ranch:handshake(Ref), ... Ranch takes care of everything else under the hood. Transports now need to have a Transport:recv_proxy_header/2 function. For ranch_ssl the function gets the port from the sslsocket() record and then calls ranch_tcp:recv_proxy_header/2 with it. This means that two undocumented features are currently used for this, but the interface is really nice so that's a sacrifice worth doing. Also worth noting is that OTP 22 should have an alternative for gen_tcp:unrecv/2 so the only real issue is about the sslsocket() record at the moment.
2018-10-10Fix a race condition on restart after listener_sup crashLoïc Hoguin
The race condition occurs when the restart is faster than the cleaning up. With this commit the restart will perform the cleanup if it was not done beforehand.
2018-10-10Make the acceptors exit rather than crash on socket closeLoïc Hoguin
This will avoid some unnecessary logs by default. SASL can be enabled to log these events.
2018-10-10Add ranch_tcp:recv_proxy_header/2Loïc Hoguin
This uses the undocumented function gen_tcp:unrecv/2. Tests have been added for both gen_tcp and ssl connections, including sending data in the same first packet, at least for gen_tcp (ssl tests may or may not end up buffering some of the TLS handshake before the recv call, but there's no guarantees).
2018-10-09Add functions to build the PROXY protocol headerLoïc Hoguin
Also add tests of the type parse(build(Info)), including for testing the TLVs and the padding/checksum verification options.
2018-10-08Add initial ranch_proxy_header implementationLoïc Hoguin
Using test cases from the spec and tomciopp/proxy_protocol. Many more tests are needed, especially for the TLV part and for the error conditions.