1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-18 21:35:06 +00:00

Kernel: Use a more detailed state machine for socket setup

This commit is contained in:
Conrad Pankoff 2019-08-10 13:17:00 +10:00 committed by Andreas Kling
parent 638008da13
commit bd6d2c0819
8 changed files with 64 additions and 11 deletions

View file

@ -414,12 +414,14 @@ void handle_tcp(const IPv4Packet& ipv4_packet)
socket->set_ack_number(tcp_packet.sequence_number() + payload_size + 1);
socket->send_tcp_packet(TCPFlags::ACK);
socket->set_state(TCPSocket::State::Established);
socket->set_setup_state(Socket::SetupState::Completed);
socket->set_connected(true);
return;
default:
kprintf("handle_tcp: unexpected flags in SynSent state\n");
socket->send_tcp_packet(TCPFlags::RST);
socket->set_state(TCPSocket::State::Closed);
socket->set_setup_state(Socket::SetupState::Completed);
return;
}
case TCPSocket::State::SynReceived:
@ -427,8 +429,10 @@ void handle_tcp(const IPv4Packet& ipv4_packet)
case TCPFlags::ACK:
socket->set_ack_number(tcp_packet.sequence_number() + payload_size + 1);
socket->set_state(TCPSocket::State::Established);
if (socket->direction() == TCPSocket::Direction::Outgoing)
if (socket->direction() == TCPSocket::Direction::Outgoing) {
socket->set_setup_state(Socket::SetupState::Completed);
socket->set_connected(true);
}
return;
default:
kprintf("handle_tcp: unexpected flags in SynReceived state\n");