authorgravatar for bblack@wikimedia.orgBrandon Black <bblack@wikimedia.org> 2025-09-03 09:07:32-05:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-09-03 22:01:45+02:00
log048f9126b8f2b41f9ef103025bafc2773a62d82a
tree128af8b050c3a4d96f99ba430c9af97bd0e7b16f
parent18bdd0e9a4929e93f71b9600f7853f7d1b49f812

Return runtime err for EISCONN when connecting

Fixes #25063

1 files changed, 6 insertions(+), 3 deletions(-)

lib/std/posix.zig+6-3
......@@ -4285,6 +4285,9 @@ pub const ConnectError = error{
42854285
42864286 /// Socket is non-blocking and already has a pending connection in progress.
42874287 ConnectionPending,
4288
4289 /// Socket was already connected
4290 AlreadyConnected,
42884291} || UnexpectedError;
42894292
42904293/// Initiate a connection on a socket.
......@@ -4305,7 +4308,7 @@ pub fn connect(sock: socket_t, sock_addr: *const sockaddr, len: socklen_t) Conne
43054308 => return error.NetworkUnreachable,
43064309 .WSAEFAULT => unreachable,
43074310 .WSAEINVAL => unreachable,
4308 .WSAEISCONN => unreachable,
4311 .WSAEISCONN => return error.AlreadyConnected,
43094312 .WSAENOTSOCK => unreachable,
43104313 .WSAEWOULDBLOCK => return error.WouldBlock,
43114314 .WSAEACCES => unreachable,
......@@ -4331,7 +4334,7 @@ pub fn connect(sock: socket_t, sock_addr: *const sockaddr, len: socklen_t) Conne
43314334 .CONNRESET => return error.ConnectionResetByPeer,
43324335 .FAULT => unreachable, // The socket structure address is outside the user's address space.
43334336 .INTR => continue,
4334 .ISCONN => unreachable, // The socket is already connected.
4337 .ISCONN => return error.AlreadyConnected, // The socket is already connected.
43354338 .HOSTUNREACH => return error.NetworkUnreachable,
43364339 .NETUNREACH => return error.NetworkUnreachable,
43374340 .NOTSOCK => unreachable, // The file descriptor sockfd does not refer to a socket.
......@@ -4391,7 +4394,7 @@ pub fn getsockoptError(sockfd: fd_t) ConnectError!void {
43914394 .BADF => unreachable, // sockfd is not a valid open file descriptor.
43924395 .CONNREFUSED => return error.ConnectionRefused,
43934396 .FAULT => unreachable, // The socket structure address is outside the user's address space.
4394 .ISCONN => unreachable, // The socket is already connected.
4397 .ISCONN => return error.AlreadyConnected, // The socket is already connected.
43954398 .HOSTUNREACH => return error.NetworkUnreachable,
43964399 .NETUNREACH => return error.NetworkUnreachable,
43974400 .NOTSOCK => unreachable, // The file descriptor sockfd does not refer to a socket.