aboutsummaryrefslogtreecommitdiffstats
path: root/src
AgeCommit message (Collapse)Author
2013-08-27Print an error if the supervisor receives an unexpected messageLoïc Hoguin
2013-08-27Close the socket if no child process was startedLoïc Hoguin
2013-08-27Merge branch 'add-offset-sendfile' of git://github.com/fishcakez/ranchLoïc Hoguin
2013-08-24Update Ranch to 0.8.50.8.5Loïc Hoguin
2013-08-20Report errors when connection processes failLoïc Hoguin
2013-08-16Add Transport:sendfile/4,/5James Fish
Adds offset based sendfile to transports. Same behaviour as file:sendfile/4,/5 except socket and file arguments are reversed and either a raw file or a filename can be used. sendfile/2,/4,/5 now compulsory callbacks in ranch_transport. ranch_tcp:sendfile/2 now defaults to a chunk_size of 8191 - the default for ranch_ssl:sendfile/2. The same default is used for both ranch_tcp:sendfile/4,5 and ranch_ssl:sendfile/4,5.
2013-07-24Work around broken elliptic-curve cipher suitesKlaus Trainer
Unfortunately the implementation of elliptic-curve ciphers that has been introduced in R16B01 is incomplete. Depending on the particular client, this can cause the TLS handshake to break during key agreement. As it turns out that most popular browsers (e.g. Firefox, Chromium, and Safari) are affected by this bug, we provide this workaround. This workaround makes sure that only cipher suite implementations that are not known to be broken are supported by default.
2013-06-27Remove unknown keys from .app.src fileLoïc Hoguin
2013-06-20Update Ranch to 0.8.40.8.4Loïc Hoguin
2013-06-20Add asn1 to the list of applications that need to be started for SSLLoïc Hoguin
2013-06-19Catch exceptions in ranch_conns_sup:active_connections/1Loïc Hoguin
It can be called from other nodes too.
2013-06-19Fix which_children call which returned incorrect valuesLoïc Hoguin
Not everything stored in the process dictionary is a pid, because we use proc_lib. Thanks to the cool spanish girl at the EUC 2013 for highlighting this issue, and sorry I forgot your name.
2013-06-07Add support for additional ssl options.Ransom Richardson
2013-05-16Update Ranch to 0.8.30.8.3Loïc Hoguin
2013-05-16Add ranch_ssl:opts() typeLoïc Hoguin
2013-05-16Add ranch_tcp:opts() typeLoïc Hoguin
2013-05-16Fix typespecs for ranch:filter_options/3Loïc Hoguin
2013-05-16Add ranch:ref() typeLoïc Hoguin
2013-05-01Update Ranch to 0.8.20.8.2Loïc Hoguin
2013-04-30Merge branch 'ssl_listen_nofile' of git://github.com/archaelus/ranchLoïc Hoguin
2013-04-29Allow connection processes to be supervisorsLoïc Hoguin
2013-04-28Allow ranch_ssl to use DER cert/key/ca options.Geoff Cant
The Erlang SSL library allows keys, certs and cacerts to be passed either as DER encoded binaries or in PEM encoded files. This patch allows ranch_ssl to be configured in either manner.
2013-04-12Update Ranch to 0.8.10.8.1Loïc Hoguin
2013-04-08Never tries to ssl_accept with an infinity timeoutLoïc Hoguin
This should be an acceptable temporary solution to the ssl_accept problem. We no longer have to worry about acceptors being dead because ssl_accept never returned.
2013-04-08Wait in the acceptor if we get emfile errorsLoïc Hoguin
This should avoid using all CPU because we keep trying to accept.
2013-04-02Update Ranch to 0.8.00.8.0Loïc Hoguin
2013-04-02Fix ranch_server:set_connections_sup/2 race conditionsJames Fish
A ranch_conns_sup could be (re)started and call ranch_server:set_connections_sup/2 before ranch_server has handled the predecessor's exit. This would cause the ranch_server to crash because ets:insert_new/2 would return false. This change allows ranch_server to handle this case by crashing the calling process instead of itself.
2013-04-02Merge branch 'server-state-recover' of git://github.com/fishcakez/ranchLoïc Hoguin
2013-04-02Add ranch_server state recoveryJames Fish
When ranch_server crashes it will now remonitor previously registered ranch_conns_sup processes so they can be removed from the registry when they die.
2013-04-02Merge branch 'fix/sendfile-badmatch' of git://github.com/soundrop/ranchLoï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.
2013-03-28Catch badmatch errors when using file:sendfileAli Sabil
2013-03-06Update Ranch to 0.6.20.6.2Loïc Hoguin
2013-03-06Add next_protocols_advertised option to ranch_sslLoïc Hoguin
For TLS Next Protocol Negotiation support.
2013-02-18Support for fail_if_no_peer_cert SSL server option.0x00F6
2013-01-17Update Ranch to 0.6.10.6.1Loïc Hoguin
2013-01-15Merge branch 'optimise-conn-count' of https://github.com/ferd/ranchLoïc Hoguin
2013-01-15Ignore tracking of requests when MaxConn = infinityFred Hebert
There is no need to contact the server and track requests unless being asked to do so by the user. It's going to be faster and more efficient to not track anything when being told tracking doesn't matter. Whenever the max connections is set to infinity, the connections counting key is not created, or is deleted if it existed already. When using a numeric value, the connection count is created or maintained if it existed already. Moreover, trying to reduce a listener's counter while the max connection number is set to `infinity` will return 0 and avoid all counting operations as they are meaningless.
2013-01-15Allow raw socket options for TCP and SSLFred Hebert
This patch lets the user set and use raw socket options as described in inet:setopts/2 documentation. The raw options can be useful to use TCP features that are platform- specific and not supported in inet in general, such as TCP_DEFER_ACCEPT or TCP_LINGER2 in linux stacks, for example.
2012-12-24Update version to 0.6.00.6.0Loïc Hoguin
2012-12-24Improve max_connections typeLoïc Hoguin
It is non_neg_integer() | infinity. Introduce the type `ranch:max_conns/0` for easier manipulation.
2012-12-24Add ranch:set_max_connections/2 and get_max_connections/1Loïc Hoguin
2012-12-21Ensure transport module is loaded before checking exportsAndrew Majorov
Tests were constantly failing without this patch. It seems ct starts erlang code server in interactive mode, so application module loading is defered.
2012-12-21Fix for cases when listener dies before acceptorsAndrew Majorov
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-12-20Return {error, badarg} if start_listener got a bad transport moduleLoïc Hoguin
2012-12-01Add Transport:sendfile/2 supportLoïc Hoguin
Uses file:sendfile/2 for TCP, a fallback function for SSL.
2012-12-01Fix typespecs for Transport:send/2Loïc Hoguin