Quellcode durchsuchen

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 vor 14 Jahren
Ursprung
Commit
901eb69d47
1 geänderte Dateien mit 11 neuen und 12 gelöschten Zeilen
  1. +11
    -12
      src/ibrowse_http_client.erl

+ 11
- 12
src/ibrowse_http_client.erl Datei anzeigen

@ -478,17 +478,19 @@ do_connect(Host, Port, Options, #state{is_ssl = true,
use_proxy = false, use_proxy = false,
ssl_options = SSLOptions}, ssl_options = SSLOptions},
Timeout) -> 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) -> 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, []), 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 %% We don't want the caller to specify certain options
filter_sock_options(Opts) -> filter_sock_options(Opts) ->
@ -1809,8 +1811,5 @@ trace_request_body(Body) ->
ok ok
end. 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_list(X) -> list_to_binary(X);
to_binary(X) when is_binary(X) -> X. to_binary(X) when is_binary(X) -> X.

Laden…
Abbrechen
Speichern