Parcourir la source

Allow custom nodelay socket option

Currently ibrowse defined the nodelay socket option to true, not allowing the caller
to supply its own value, which would also make the sndbuf option useless if the caller
supplied it as well.
When sending large bodies, setting nodelay to false with a custom sndbuf can improve
network throughput very significantly. For e.g., custom tests reduced an upload from
16 minutes to about 12 minutes.
pull/28/head
Filipe David Manana il y a 14 ans
Parent
révision
901eb69d47
1 fichiers modifiés avec 11 ajouts et 12 suppressions
  1. +11
    -12
      src/ibrowse_http_client.erl

+ 11
- 12
src/ibrowse_http_client.erl Voir le fichier

@ -478,17 +478,19 @@ do_connect(Host, Port, Options, #state{is_ssl = true,
use_proxy = false,
ssl_options = SSLOptions},
Timeout) ->
Caller_socket_options = get_value(socket_options, Options, []),
Other_sock_options = filter_sock_options(SSLOptions ++ Caller_socket_options),
ssl:connect(Host, Port,
[binary, {nodelay, true}, {active, false} | Other_sock_options],
Timeout);
ssl:connect(Host, Port, get_sock_options(Options, SSLOptions), Timeout);
do_connect(Host, Port, Options, _State, Timeout) ->
gen_tcp:connect(Host, Port, get_sock_options(Options, []), Timeout).
get_sock_options(Options, SSLOptions) ->
Caller_socket_options = get_value(socket_options, Options, []),
Other_sock_options = filter_sock_options(Caller_socket_options),
gen_tcp:connect(Host, to_integer(Port),
[binary, {nodelay, true}, {active, false} | Other_sock_options],
Timeout).
Other_sock_options = filter_sock_options(SSLOptions ++ Caller_socket_options),
case lists:keysearch(nodelay, 1, Other_sock_options) of
false ->
[{nodelay, true}, binary, {active, false} | Other_sock_options];
{value, _} ->
[binary, {active, false} | Other_sock_options]
end.
%% We don't want the caller to specify certain options
filter_sock_options(Opts) ->
@ -1809,8 +1811,5 @@ trace_request_body(Body) ->
ok
end.
to_integer(X) when is_list(X) -> list_to_integer(X);
to_integer(X) when is_integer(X) -> X.
to_binary(X) when is_list(X) -> list_to_binary(X);
to_binary(X) when is_binary(X) -> X.

Chargement…
Annuler
Enregistrer