@@ -83,7 +83,9 @@ eval_tune_socket_fun(Sock, {Fun, Opts}) ->
83
83
mk_tune_socket_fun (Opts ) ->
84
84
TcpOpts = proplists :get_value (tcp_options , Opts , []),
85
85
SockOpts = lists :flatten ([sock_opt (O ) || O <- merge_sock_defaults (TcpOpts )]),
86
- TuneOpts = [{Name , Val } || {Name , Val } <- Opts , Name =:= tune_buffer ],
86
+ TuneOpts = [{Name , Val } || {Name , Val } <- Opts ,
87
+ Name =:= tune_buffer orelse
88
+ Name =:= tune_fun ],
87
89
{fun ? MODULE :tune_socket /2 , [{setopts , SockOpts } | TuneOpts ]}.
88
90
89
91
tune_socket (Sock , [{setopts , SockOpts } | Rest ]) ->
@@ -93,16 +95,24 @@ tune_socket(Sock, [{setopts, SockOpts} | Rest]) ->
93
95
Error ->
94
96
Error
95
97
end ;
96
- tune_socket (Sock , [{tune_buffer , true } | _ ]) ->
98
+ tune_socket (Sock , [{tune_buffer , true } | Rest ]) ->
97
99
try
98
100
BufRecv = ensure (socket :getopt (Sock , {socket , rcvbuf })),
99
101
Buffer = ensure (socket :getopt (Sock , {otp , rcvbuf })),
100
102
Max = max (Buffer , BufRecv ),
101
103
ok = ensure (socket :setopt (Sock , {otp , rcvbuf }, Max )),
102
- { ok , Sock }
104
+ tune_socket ( Sock , Rest )
103
105
catch
104
106
Error -> Error
105
107
end ;
108
+ tune_socket (Sock , [{tune_fun , {M , F , A }} | Rest ]) ->
109
+ % % NOTE: Socket is not part of the argument list, backward compatibility.
110
+ case apply (M , F , A ) of
111
+ ok ->
112
+ tune_socket (Sock , Rest );
113
+ Error ->
114
+ Error
115
+ end ;
106
116
tune_socket (Sock , _ ) ->
107
117
{ok , Sock }.
108
118
0 commit comments