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

Kernel: Add support for recv() with MSG_DONTWAIT.

Passing this flag to recv() temporarily puts the file descriptor into
non-blocking mode.

Also implement LocalSocket::recv() as a simple forwarding to read().
This commit is contained in:
Andreas Kling 2019-05-20 03:44:45 +02:00
parent 0b850cf726
commit b3a1671f1a
5 changed files with 23 additions and 7 deletions

View file

@ -2213,8 +2213,16 @@ ssize_t Process::sys$recvfrom(const Syscall::SC_recvfrom_params* params)
if (!descriptor->is_socket())
return -ENOTSOCK;
auto& socket = *descriptor->socket();
kprintf("recvfrom %p (%u), flags=%u, addr: %p (%p)\n", buffer, buffer_length, flags, addr, addr_length);
return socket.recvfrom(*descriptor, buffer, buffer_length, flags, addr, addr_length);
bool original_blocking = descriptor->is_blocking();
if (flags & MSG_DONTWAIT)
descriptor->set_blocking(false);
auto nrecv = socket.recvfrom(*descriptor, buffer, buffer_length, flags, addr, addr_length);
if (flags & MSG_DONTWAIT)
descriptor->set_blocking(original_blocking);
return nrecv;
}
int Process::sys$getsockname(int sockfd, sockaddr* addr, socklen_t* addrlen)