Kernel: More work on sockets. Getting there..

This commit is contained in:
Andreas Kling 2019-02-14 15:40:04 +01:00
parent a63e8839da
commit b12ab1270a
Notes: sideshowbarker 2024-07-19 15:43:05 +09:00
3 changed files with 22 additions and 7 deletions

View file

@ -2303,6 +2303,13 @@ int Process::sys$accept(int sockfd, sockaddr* address, socklen_t* address_size)
return -EFAULT;
if (!validate_write(address, *address_size))
return -EFAULT;
if (number_of_open_file_descriptors() >= m_max_open_file_descriptors)
return -EMFILE;
int fd = 0;
for (; fd < (int)m_max_open_file_descriptors; ++fd) {
if (!m_fds[fd])
break;
}
auto* descriptor = file_descriptor(sockfd);
if (!descriptor)
return -EBADF;
@ -2315,8 +2322,11 @@ int Process::sys$accept(int sockfd, sockaddr* address, socklen_t* address_size)
}
auto client = socket.accept();
ASSERT(client);
client->get_address(address, address_size);
return 0;
bool success = client->get_address(address, address_size);
ASSERT(success);
auto client_descriptor = FileDescriptor::create(move(client), SocketRole::Accepted);
m_fds[fd].set(move(client_descriptor));
return fd;
}
int Process::sys$connect(int sockfd, const sockaddr*, socklen_t)