1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-19 23:25:08 +00:00

Kernel: Fix race between accept() and connect().

We had a bug where an accepted socket would appear to be EOF/disconnected
on the accepting side until the connecting side had called attach_fd().

Fix this by adding a new SocketRole::Connecting state.
This commit is contained in:
Andreas Kling 2019-03-20 02:33:51 +01:00
parent 31d3616027
commit 4aa0ab4e08
5 changed files with 14 additions and 4 deletions

View file

@ -2503,6 +2503,7 @@ int Process::sys$connect(int sockfd, const sockaddr* address, socklen_t address_
if (!descriptor->is_socket())
return -ENOTSOCK;
auto& socket = *descriptor->socket();
descriptor->set_socket_role(SocketRole::Connecting);
auto result = socket.connect(address, address_size);
if (result.is_error())
return result;