From b24b1080b11654e01f05e43d1cee2b5795fed7c0 Mon Sep 17 00:00:00 2001 From: Kiko Fernandez-Reyes Date: Mon, 3 Feb 2025 22:00:13 +0100 Subject: [PATCH 1/4] socket: fix typespecs --- lib/kernel/src/socket.erl | 48 ++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/lib/kernel/src/socket.erl b/lib/kernel/src/socket.erl index 973a05047d6d..37e8b7e6fa9b 100644 --- a/lib/kernel/src/socket.erl +++ b/lib/kernel/src/socket.erl @@ -3190,13 +3190,9 @@ listen(Socket, Backlog) -> -doc("Equivalent to [`accept(ListenSocket, infinity)`](`accept/2`)."). -spec accept(ListenSocket) -> Result when Result :: {'ok', Socket} | - {'select', SelectInfo} | - {'completion', CompletionInfo} | {'error', Reason}, ListenSocket :: socket(), Socket :: socket(), - SelectInfo :: select_info(), - CompletionInfo :: completion_info(), Reason :: dynamic(). @@ -3763,21 +3759,15 @@ an explanation of `TimeoutOrHandle`. """. -spec sendto(Socket :: socket(), Data :: iodata(), - Dest :: sockaddr(), Flags | TimeoutOrHandle) -> Result when - TimeoutOrHandle :: dynamic(), - Flags :: list(), - Result :: 'ok' - | {'ok', RestData :: binary()} - | {'error', Reason} - | {'error', {Reason, RestData :: binary()}}, - Reason :: posix() | 'closed' | invalid(); + Dest :: sockaddr(), Flags :: [msg_flag() | integer()]) -> dynamic(); (Socket :: socket(), Data :: iodata(), - Cont :: select_info(), TimeoutOrHandle :: dynamic()) -> Result when - Result :: 'ok' - | {'ok', RestData :: binary()} - | {'error', Reason} - | {'error', {Reason, RestData :: binary()}}, - Reason :: posix() | 'closed' | invalid(). + Cont :: select_info(), Timeout | Handle) -> dynamic() when + Timeout :: infinity | non_neg_integer(), + Handle :: nowait | select_handle(); + (Socket :: socket(), Data :: iodata(), + Dest :: sockaddr(), Timeout | Handle) -> dynamic() when + Timeout :: infinity | non_neg_integer(), + Handle :: nowait | select_handle() | completion_handle(). sendto(Socket, Data, Dest, Flags) when is_list(Flags) -> sendto(Socket, Data, Dest, Flags, ?ESOCK_SENDTO_TIMEOUT_DEFAULT); @@ -4880,7 +4870,7 @@ With argument `Length`; equivalent to With argument `Flags`; equivalent to [`recv(Socket, 0, Flags, infinity)`](`recv/4`) *(since OTP 24.0)*. """. --spec recv(Socket :: socket(), Flags :: list()) -> dynamic(); +-spec recv(Socket :: socket(), Flags :: [msg_flag() | integer()]) -> dynamic(); (Socket :: socket(), Length :: non_neg_integer()) -> dynamic(). recv(Socket, Flags) when is_list(Flags) -> @@ -4909,12 +4899,12 @@ With arguments `Flags` and `TimeoutOrHandle`; equivalent to """. -spec recv(Socket, Flags, TimeoutOrHandle) -> dynamic() when Socket :: socket(), - Flags :: list(), - TimeoutOrHandle :: nowait | select_handle() | completion_handle(); - (Socket :: socket(), Length :: non_neg_integer(), Flags :: list()) + Flags :: [msg_flag() | integer()], + TimeoutOrHandle :: 'infinity' | non_neg_integer() | nowait | select_handle() | completion_handle(); + (Socket :: socket(), Length :: non_neg_integer(), Flags :: [msg_flag() | integer()]) -> dynamic(); - (Socket :: socket(), Length :: non_neg_integer(), TimeoutOrHandle :: select_handle() | completion_handle()) - -> dynamic(). + (Socket :: socket(), Length :: non_neg_integer(), TimeoutOrHandle) -> dynamic() when + TimeoutOrHandle :: 'infinity' | non_neg_integer() | nowait | select_handle() | completion_handle(). recv(Socket, Flags, TimeoutOrHandle) when is_list(Flags) -> recv(Socket, 0, Flags, TimeoutOrHandle); @@ -5346,9 +5336,8 @@ With arguments `Flags` and `TimeoutOrHandle`; equivalent to -> dynamic(); (Socket :: socket(), BufSz :: non_neg_integer(), Flags :: [msg_flag() | integer()]) -> dynamic(); - (Socket :: socket(), BufSz :: non_neg_integer(), - TimeoutOrHandle :: 'nowait' | select_handle() | completion_handle()) - -> dynamic(). + (Socket :: socket(), BufSz :: non_neg_integer(), TimeoutOrHandle) -> dynamic() when + TimeoutOrHandle :: 'infinity' | non_neg_integer() | 'nowait' | select_handle() | completion_handle(). recvfrom(Socket, Flags, TimeoutOrHandle) when is_list(Flags) -> recvfrom(Socket, 0, Flags, TimeoutOrHandle); @@ -5553,7 +5542,10 @@ With argument `TimeoutOrHandle`; equivalent to `TimeoutOrHandle :: Handle` has been allowed *since OTP 24.0*. """. -spec recvmsg(Socket :: socket(), Flags :: list()) -> dynamic(); - (Socket :: socket(), TimeoutOrHandle :: reference() | 'infinity' | 'nowait' | non_neg_integer()) -> dynamic(). + (Socket :: socket(), TimeoutOrHandle) -> dynamic() when + TimeoutOrHandle :: Timeout | Handle, + Handle :: select_handle() | completion_handle(), + Timeout :: 'infinity' | 'nowait' | non_neg_integer(). recvmsg(Socket, Flags) when is_list(Flags) -> recvmsg(Socket, 0, 0, Flags, ?ESOCK_RECV_TIMEOUT_DEFAULT); From 7b6123e0d6a34c6dc4c118630f74a5e132698dc5 Mon Sep 17 00:00:00 2001 From: Kiko Fernandez-Reyes Date: Tue, 4 Feb 2025 09:08:14 +0100 Subject: [PATCH 2/4] socket: infinity | non_neg replaced by timeout() --- lib/kernel/src/socket.erl | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/lib/kernel/src/socket.erl b/lib/kernel/src/socket.erl index 37e8b7e6fa9b..63c05ce053a0 100644 --- a/lib/kernel/src/socket.erl +++ b/lib/kernel/src/socket.erl @@ -3761,13 +3761,9 @@ an explanation of `TimeoutOrHandle`. -spec sendto(Socket :: socket(), Data :: iodata(), Dest :: sockaddr(), Flags :: [msg_flag() | integer()]) -> dynamic(); (Socket :: socket(), Data :: iodata(), - Cont :: select_info(), Timeout | Handle) -> dynamic() when - Timeout :: infinity | non_neg_integer(), - Handle :: nowait | select_handle(); + Cont :: select_info(), Timeout :: timeout() | Handle :: nowait | select_handle()) -> dynamic(); (Socket :: socket(), Data :: iodata(), - Dest :: sockaddr(), Timeout | Handle) -> dynamic() when - Timeout :: infinity | non_neg_integer(), - Handle :: nowait | select_handle() | completion_handle(). + Dest :: sockaddr(), Timeout :: timeout() | Handle :: nowait | select_handle() | completion_handle()) -> dynamic(). sendto(Socket, Data, Dest, Flags) when is_list(Flags) -> sendto(Socket, Data, Dest, Flags, ?ESOCK_SENDTO_TIMEOUT_DEFAULT); @@ -4900,11 +4896,11 @@ With arguments `Flags` and `TimeoutOrHandle`; equivalent to -spec recv(Socket, Flags, TimeoutOrHandle) -> dynamic() when Socket :: socket(), Flags :: [msg_flag() | integer()], - TimeoutOrHandle :: 'infinity' | non_neg_integer() | nowait | select_handle() | completion_handle(); + TimeoutOrHandle :: timeout() | nowait | select_handle() | completion_handle(); (Socket :: socket(), Length :: non_neg_integer(), Flags :: [msg_flag() | integer()]) -> dynamic(); (Socket :: socket(), Length :: non_neg_integer(), TimeoutOrHandle) -> dynamic() when - TimeoutOrHandle :: 'infinity' | non_neg_integer() | nowait | select_handle() | completion_handle(). + TimeoutOrHandle :: timeout() | nowait | select_handle() | completion_handle(). recv(Socket, Flags, TimeoutOrHandle) when is_list(Flags) -> recv(Socket, 0, Flags, TimeoutOrHandle); @@ -5337,7 +5333,7 @@ With arguments `Flags` and `TimeoutOrHandle`; equivalent to (Socket :: socket(), BufSz :: non_neg_integer(), Flags :: [msg_flag() | integer()]) -> dynamic(); (Socket :: socket(), BufSz :: non_neg_integer(), TimeoutOrHandle) -> dynamic() when - TimeoutOrHandle :: 'infinity' | non_neg_integer() | 'nowait' | select_handle() | completion_handle(). + TimeoutOrHandle :: timeout() | 'nowait' | select_handle() | completion_handle(). recvfrom(Socket, Flags, TimeoutOrHandle) when is_list(Flags) -> recvfrom(Socket, 0, Flags, TimeoutOrHandle); @@ -5545,7 +5541,7 @@ With argument `TimeoutOrHandle`; equivalent to (Socket :: socket(), TimeoutOrHandle) -> dynamic() when TimeoutOrHandle :: Timeout | Handle, Handle :: select_handle() | completion_handle(), - Timeout :: 'infinity' | 'nowait' | non_neg_integer(). + Timeout :: timeout() | 'nowait'. recvmsg(Socket, Flags) when is_list(Flags) -> recvmsg(Socket, 0, 0, Flags, ?ESOCK_RECV_TIMEOUT_DEFAULT); From 7f1416f240c8bd37ac226d2c2098e7739ee084f6 Mon Sep 17 00:00:00 2001 From: Kiko Fernandez-Reyes Date: Tue, 4 Feb 2025 11:57:34 +0100 Subject: [PATCH 3/4] socket: improve type specs as per convention --- lib/kernel/src/socket.erl | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/kernel/src/socket.erl b/lib/kernel/src/socket.erl index 63c05ce053a0..f7c70dcf0bf4 100644 --- a/lib/kernel/src/socket.erl +++ b/lib/kernel/src/socket.erl @@ -3763,7 +3763,7 @@ an explanation of `TimeoutOrHandle`. (Socket :: socket(), Data :: iodata(), Cont :: select_info(), Timeout :: timeout() | Handle :: nowait | select_handle()) -> dynamic(); (Socket :: socket(), Data :: iodata(), - Dest :: sockaddr(), Timeout :: timeout() | Handle :: nowait | select_handle() | completion_handle()) -> dynamic(). + Dest :: sockaddr(), Timeout :: timeout() | 'nowait' | Handle :: select_handle() | completion_handle()) -> dynamic(). sendto(Socket, Data, Dest, Flags) when is_list(Flags) -> sendto(Socket, Data, Dest, Flags, ?ESOCK_SENDTO_TIMEOUT_DEFAULT); @@ -4896,11 +4896,11 @@ With arguments `Flags` and `TimeoutOrHandle`; equivalent to -spec recv(Socket, Flags, TimeoutOrHandle) -> dynamic() when Socket :: socket(), Flags :: [msg_flag() | integer()], - TimeoutOrHandle :: timeout() | nowait | select_handle() | completion_handle(); + TimeoutOrHandle :: timeout() | 'nowait' | select_handle() | completion_handle(); (Socket :: socket(), Length :: non_neg_integer(), Flags :: [msg_flag() | integer()]) -> dynamic(); (Socket :: socket(), Length :: non_neg_integer(), TimeoutOrHandle) -> dynamic() when - TimeoutOrHandle :: timeout() | nowait | select_handle() | completion_handle(). + TimeoutOrHandle :: timeout() | 'nowait' | select_handle() | completion_handle(). recv(Socket, Flags, TimeoutOrHandle) when is_list(Flags) -> recv(Socket, 0, Flags, TimeoutOrHandle); @@ -5539,9 +5539,8 @@ With argument `TimeoutOrHandle`; equivalent to """. -spec recvmsg(Socket :: socket(), Flags :: list()) -> dynamic(); (Socket :: socket(), TimeoutOrHandle) -> dynamic() when - TimeoutOrHandle :: Timeout | Handle, - Handle :: select_handle() | completion_handle(), - Timeout :: timeout() | 'nowait'. + TimeoutOrHandle :: timeout() | 'nowait' | Handle, + Handle :: select_handle() | completion_handle(). recvmsg(Socket, Flags) when is_list(Flags) -> recvmsg(Socket, 0, 0, Flags, ?ESOCK_RECV_TIMEOUT_DEFAULT); From ad9f3e8814736437a7fdc59260c2872419b700aa Mon Sep 17 00:00:00 2001 From: Kiko Fernandez-Reyes Date: Wed, 5 Feb 2025 10:47:12 +0100 Subject: [PATCH 4/4] socket: fix spec of sendto --- lib/kernel/src/socket.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/kernel/src/socket.erl b/lib/kernel/src/socket.erl index f7c70dcf0bf4..f08e01521cf3 100644 --- a/lib/kernel/src/socket.erl +++ b/lib/kernel/src/socket.erl @@ -3761,7 +3761,7 @@ an explanation of `TimeoutOrHandle`. -spec sendto(Socket :: socket(), Data :: iodata(), Dest :: sockaddr(), Flags :: [msg_flag() | integer()]) -> dynamic(); (Socket :: socket(), Data :: iodata(), - Cont :: select_info(), Timeout :: timeout() | Handle :: nowait | select_handle()) -> dynamic(); + Cont :: select_info(), Timeout :: timeout() | 'nowait' | Handle :: select_handle()) -> dynamic(); (Socket :: socket(), Data :: iodata(), Dest :: sockaddr(), Timeout :: timeout() | 'nowait' | Handle :: select_handle() | completion_handle()) -> dynamic().