mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 08:48:11 +00:00
Kernel: Support non-blocking connect().
If connect() is called on a non-blocking socket, it will "fail" immediately with -EINPROGRESS. After that, you select() on the socket and wait for it to become writable.
This commit is contained in:
parent
7fcca0ce4b
commit
65d6318c33
11 changed files with 22 additions and 17 deletions
|
@ -66,7 +66,7 @@ KResult IPv4Socket::bind(const sockaddr* address, socklen_t address_size)
|
|||
ASSERT_NOT_REACHED();
|
||||
}
|
||||
|
||||
KResult IPv4Socket::connect(const sockaddr* address, socklen_t address_size)
|
||||
KResult IPv4Socket::connect(const sockaddr* address, socklen_t address_size, ShouldBlock should_block)
|
||||
{
|
||||
ASSERT(!m_bound);
|
||||
if (address_size != sizeof(sockaddr_in))
|
||||
|
@ -78,7 +78,7 @@ KResult IPv4Socket::connect(const sockaddr* address, socklen_t address_size)
|
|||
m_destination_address = IPv4Address((const byte*)&ia.sin_addr.s_addr);
|
||||
m_destination_port = ntohs(ia.sin_port);
|
||||
|
||||
return protocol_connect();
|
||||
return protocol_connect(should_block);
|
||||
}
|
||||
|
||||
void IPv4Socket::attach_fd(SocketRole)
|
||||
|
@ -110,7 +110,7 @@ ssize_t IPv4Socket::write(SocketRole, const byte* data, ssize_t size)
|
|||
|
||||
bool IPv4Socket::can_write(SocketRole) const
|
||||
{
|
||||
return true;
|
||||
return is_connected();
|
||||
}
|
||||
|
||||
int IPv4Socket::allocate_source_port_if_needed()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue