diff --git a/Kernel/Net/Socket.cpp b/Kernel/Net/Socket.cpp index 91d5bc31cb..0749d0ee2e 100644 --- a/Kernel/Net/Socket.cpp +++ b/Kernel/Net/Socket.cpp @@ -65,7 +65,6 @@ RefPtr Socket::accept() auto client = m_pending.take_first(); ASSERT(!client->is_connected()); client->m_acceptor_pid = m_origin_pid; - client->set_setup_state(SetupState::Completed); client->m_connected = true; client->m_role = Role::Accepted; return client; diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 221fe8f635..8a122fb1db 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -2351,6 +2351,9 @@ int Process::sys$accept(int accepting_socket_fd, sockaddr* address, socklen_t* a // I'm not sure if this matches other systems but it makes sense to me. accepted_socket_description->set_blocking(accepting_socket_description->is_blocking()); m_fds[accepted_socket_fd].set(move(accepted_socket_description), m_fds[accepting_socket_fd].flags); + + // NOTE: Moving this state to Completed is what causes connect() to unblock on the client side. + accepted_socket->set_setup_state(Socket::SetupState::Completed); return accepted_socket_fd; }