aboutsummaryrefslogtreecommitdiffstats
path: root/src/ranch_acceptors_sup.erl
AgeCommit message (Collapse)Author
2018-07-05Hide cacerts from the listen error logLoïc Hoguin
It can be quite huge and hinders readability.
2018-07-05Add a logger transport optionLoïc Hoguin
I had to use the process dictionary to work around the current interface for one log call. You have been warned.
2018-07-04Better distinguish between Ranch and socket optionsLoïc Hoguin
A map should now be used when specifying transport options that contain more than just socket options. It is still possible to pass a list of socket options directly as a convenience. The ack_timeout is renamed to handshake_timeout when specified as a map. This corresponds to the new function ranch:handshake/1,2 that will be favored in Ranch 2.0. Specifying Ranch-specific options via the proplist will no longer be possible starting from Ranch 2.0.
2018-05-02Add suspend/resume of listeners and update of transport optionsj.uhlig
This allows graceful draining of connections, updating transport options on a running listener without having to drop connections and other similar scenarios. Note that when updating transport options the listener must be suspended which means that new connections will be rejected until the listener is resumed.
2018-04-10Ranch 1.5.01.5.0Loïc Hoguin
2017-06-07Update Copyright to 20171.4.0Loïc Hoguin
2017-05-31Deprecated ranch:start_listener/6 and child_spec/6Loïc Hoguin
The NumAcceptors argument has been moved to transport option num_acceptor, which defaults to 10. The functions now take one less argument. The old functions are still here, though deprecated.
2016-11-24Update copyright yearLoïc Hoguin
2016-11-15Improve error reportingAlexey Lebedeff
Simplify some return values, improve error messages for eaddrinuse and no_cert. Amended to add tests and simpler code. Also hides the contents of cert and key transport options, if any.
2016-09-19Renaming NbAcceptors to NumAcceptorsferigis
2015-12-18Use the default restart intensity in all supervisorsLoïc Hoguin
This reduces from 10 restarts in 10 seconds to 1 restart in 5 seconds. This is the new default in OTP 18, and it fits the kinds of processes that Ranch deals with: * Supervisors: default makes sense. * Acceptors: they crash on socket error. They'll probably crash again if the socket didn't change. * Connection processes: they are never restarted.
2015-08-25Add an error message when Transport:listen failsLoïc Hoguin
Should be more user friendly.
2015-08-25Add ranch:get_addr/1Loïc Hoguin
2015-08-18Welcome to 2015Loïc Hoguin
2015-08-17Don't pass Ranch-specific options down to transportsLoïc Hoguin
Should fix Dialyzer issues. The options are now also documented in the Ranch module, and there's new ranch:opt(), ranch_tcp:opt() and ranch_ssl:opt() for use in third party code.
2014-06-10Update copyright yearsLoïc Hoguin
2013-12-07Get rid of a ton of pointless commentsLoïc Hoguin
All of it can be found in the manual, which defines what the code must do, and is always up to date unlike the code comments.
2013-05-16Add ranch:ref() typeLoïc Hoguin
2013-04-01Remove ranch_listener and replace ListenerPid by RefLoïc Hoguin
We just don't need this process anymore. Less, simpler code! API changes: * Protocols start_link first argument is now Ref instead of ListenerPid * ranch:accept_ack/1 argument is now Ref instead of ListenerPid * ranch_listener:remove_connection/1 becomes ranch:remove_connection/1 and its argument is now Ref instead of ListenerPid Ref is the name of the listener given as first argument to start_listener/6.
2013-03-31Use a custom supervisor for ranch_conns_supLoïc Hoguin
This change was designed so that we don't have this supervisor and ranch_listener performing the same job, namely monitoring connection processes, the first through links and the second through monitors. This change also makes possible various optimizations: * Acceptors don't need to know about options, maximum number of connections, or anything else. They can just accept, pass the socket to the supervisor, and when the supervisor replies continue accepting connections. * The supervisor holds most of the information that will be passed to created processes. This reduces copying. * The supervisor temporarily takes ownership of the socket, then creates the connection process and gives it ownership, streamlining the creation. * The supervisor can hold acceptors in their receive loop if max_connections is reached. When this number gets below the limit it can then send a message to a sleeping acceptor to make it resume its operations. * Because we know that all connection process creations are made from the local Erlang node, we can greatly reduce the number operations to be made when calling the supervisor. * Because all acceptors die if this supervisor dies, we can remove even more operations from the calling code. We do not need to monitor or wait for a timeout. This reduces the call code to two statements: send and receive. (Thanks James Fish for helping with that.) * The supervisor only needs to keep track of a list of pids. There is no children specification to be maintained, we do not need to handle restart strategy (no process can be restarted because the socket dies with it). We are using the process dictionary for storing the pids as it proved to be the simplest and fastest solution. * The supervisor maintains a count of current connections, but also of processes (including the ones that removed themselves from the pool), making any query of these values very fast. The supervisor should still be compatible with OTP principles. It responds to calls from the supervisor module as expected, although some of them are disabled and an error will be returned, for example supervisor:start_child/2. It is also started with proc_lib and handles system messages. sys:get_status/1 can thus be used as expected. We can see a great increase in the number of requests/s, a great improvement in the latency of requests, and we can simply accept requests faster than before. It will probably have a bigger increase under virtualized environments, although that's only a guess. As a result of this, we don't write much anymore in the ranch_server ets table, so the write_concurrency option was removed. Tests were also slightly improved to prevent race conditions.
2012-12-21Make listener supervisor failures less painfulAndrew Majorov
Two general issues were addressed. The first one is the issue with statically defined pids passed into childspecs. This issue prevents regular supervisor' children restarts in the case of someone's failure. The second one is the not quite appropriate restart strategy. Changed to rest_for_one which in pair with previous fixes assures that live connections will not die in the case of partial failure. Among possible failures are listening socket shutdown or frequent accept errors.
2012-12-20Add {socket, Socket} transport option, for accepting on existing socketsAndrew Thompson
2012-07-25Make acceptors query the protocol opts on startupLoïc Hoguin
This way, if a crash happens in one of them after a protocol options upgrade has occured, the restarted acceptor will get the upgraded options as expected, and not the initial ones.
2012-07-25Register acceptors through ranch_serverLoïc Hoguin
2012-07-22Add support for listening on random port numbers (port 0)Loïc Hoguin
ranch:get_port/1 returns the given listener's port.
2012-06-04Add Transport:connect/3 and remove types unneeded by R15B+0.2.1Loïc Hoguin
Also use one export per line to improve future diffs. Bump the version to 0.2.1 to reflect this change.
2012-04-14Import the acceptor code from CowboyLoïc Hoguin
Modules were renamed. The 'cowboy_' prefix became 'ranch_'. At the same time, ranch_ssl_transport became ranch_ssl, and ranch_tcp_transport became ranch_tcp, because appending '_transport' felt a bit redundant considering SSL and TCP clearly are transports. One test has been added to make sure everything is working.