Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:19
erlang
0936-inets-Handle-that-inet-ssl-setopt-can-retu...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0936-inets-Handle-that-inet-ssl-setopt-can-return-error.patch of Package erlang
From 6881c9c532c7d9d19f039e2aa80c1d740295d220 Mon Sep 17 00:00:00 2001 From: Ingela Anderton Andin <ingela@erlang.org> Date: Thu, 11 Jun 2020 09:53:30 +0200 Subject: [PATCH 3/3] inets: Handle that inet/ssl:setopt can return error --- lib/ftp/src/ftp.erl | 4 +- lib/inets/src/http_client/httpc_handler.erl | 18 ++++---- lib/inets/src/http_lib/http_transport.erl | 6 +++ .../src/http_server/httpd_request_handler.erl | 45 ++++++++++--------- 4 files changed, 41 insertions(+), 32 deletions(-) diff --git a/lib/inets/src/ftp/ftp.erl b/lib/inets/src/ftp/ftp.erl index dac316fe0b..b94c535467 100644 --- a/lib/inets/src/ftp/ftp.erl +++ b/lib/inets/src/ftp/ftp.erl @@ -2274,8 +2274,8 @@ activate_connection(Socket) -> activate_connection(ssl, ssl_closed, Socket) end. -activate_connection(API, CloseTag, Socket) -> - Socket = unwrap_socket(Socket), +activate_connection(API, CloseTag, Socket0) -> + Socket = unwrap_socket(Socket0), case API:setopts(Socket, [{active, once}]) of ok -> ok; diff --git a/lib/inets/src/http_client/httpc_handler.erl b/lib/inets/src/http_client/httpc_handler.erl index 3f91ae062c..1f8806d1d8 100644 --- a/lib/inets/src/http_client/httpc_handler.erl +++ b/lib/inets/src/http_client/httpc_handler.erl @@ -831,8 +831,7 @@ connect_and_send_first_request(Address, Request, #state{options = Options0} = St headers = undefined, body = undefined, status = new}, - http_transport:setopts(SocketType, - Socket, [{active, once}]), + activate_once(Session), NewState = activate_request_timeout(TmpState), {ok, NewState}; {error, Reason} -> @@ -1238,7 +1237,12 @@ case_insensitive_header(Str) -> Str. activate_once(#session{socket = Socket, socket_type = SocketType}) -> - http_transport:setopts(SocketType, Socket, [{active, once}]). + case http_transport:setopts(SocketType, Socket, [{active, once}]) of + ok -> + ok; + {error, _} -> %% inet can return einval instead of closed + self() ! {http_transport:close_tag(SocketType), Socket} + end. close_socket(#session{socket = {remote_close,_}}) -> ok; @@ -1581,8 +1585,7 @@ send_raw(SocketType, Socket, ProcessBody, Acc) -> end end. -tls_tunnel(Address, Request, #state{session = #session{socket = Socket, - socket_type = SocketType} = Session} = State, +tls_tunnel(Address, Request, #state{session = #session{} = Session} = State, ErrorHandler) -> UpgradeRequest = tls_tunnel_request(Request), case httpc_request:send(Address, Session, UpgradeRequest) of @@ -1594,8 +1597,7 @@ tls_tunnel(Address, Request, #state{session = #session{socket = Socket, init_status_line(UpgradeRequest), headers = undefined, body = undefined}, - http_transport:setopts(SocketType, - Socket, [{active, once}]), + activate_once(Session), NewState = activate_request_timeout(TmpState), {ok, NewState#state{status = {ssl_tunnel, Request}}}; {error, Reason} -> @@ -1661,7 +1663,7 @@ tls_upgrade(#state{status = type = SessionType, client_close = ClientClose}, httpc_request:send(Address, Session, Request), - http_transport:setopts(SocketType, TLSSocket, [{active, once}]), + activate_once(Session), NewState = State#state{session = Session, request = Request, mfa = init_mfa(Request, State), diff --git a/lib/inets/src/http_lib/http_transport.erl b/lib/inets/src/http_lib/http_transport.erl index d5e1d71336..d2148a3a8a 100644 --- a/lib/inets/src/http_lib/http_transport.erl +++ b/lib/inets/src/http_lib/http_transport.erl @@ -27,6 +27,7 @@ listen/4, listen/5, accept/2, accept/3, close/2, + close_tag/1, send/3, controlling_process/3, setopts/3, getopts/2, getopts/3, @@ -459,6 +460,11 @@ ipv6_name({A, B, C, D, E, F, G, H}) -> http_util:integer_to_hexlist(H). +close_tag(ip_comm) -> + tcp_closed; +close_tag(_) -> + ssl_closed. + %%%======================================================================== %%% Internal functions %%%======================================================================== -- 2.26.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor