|
|
@ -491,7 +491,7 @@ std::pair<s32, Errno> BSD::PollImpl(std::vector<u8>& write_buffer, std::vector<u
|
|
|
|
for (PollFD& pollfd : fds) {
|
|
|
|
for (PollFD& pollfd : fds) {
|
|
|
|
ASSERT(pollfd.revents == 0);
|
|
|
|
ASSERT(pollfd.revents == 0);
|
|
|
|
|
|
|
|
|
|
|
|
if (pollfd.fd > MAX_FD || pollfd.fd < 0) {
|
|
|
|
if (pollfd.fd > static_cast<s32>(MAX_FD) || pollfd.fd < 0) {
|
|
|
|
LOG_ERROR(Service, "File descriptor handle={} is invalid", pollfd.fd);
|
|
|
|
LOG_ERROR(Service, "File descriptor handle={} is invalid", pollfd.fd);
|
|
|
|
pollfd.revents = 0;
|
|
|
|
pollfd.revents = 0;
|
|
|
|
return {0, Errno::SUCCESS};
|
|
|
|
return {0, Errno::SUCCESS};
|
|
|
@ -764,6 +764,7 @@ std::pair<s32, Errno> BSD::SendToImpl(s32 fd, u32 flags, const std::vector<u8>&
|
|
|
|
SockAddrIn guest_addr_in;
|
|
|
|
SockAddrIn guest_addr_in;
|
|
|
|
std::memcpy(&guest_addr_in, addr.data(), sizeof(guest_addr_in));
|
|
|
|
std::memcpy(&guest_addr_in, addr.data(), sizeof(guest_addr_in));
|
|
|
|
addr_in = Translate(guest_addr_in);
|
|
|
|
addr_in = Translate(guest_addr_in);
|
|
|
|
|
|
|
|
p_addr_in = &addr_in;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return Translate(file_descriptors[fd]->socket->SendTo(flags, message, p_addr_in));
|
|
|
|
return Translate(file_descriptors[fd]->socket->SendTo(flags, message, p_addr_in));
|
|
|
@ -795,7 +796,7 @@ s32 BSD::FindFreeFileDescriptorHandle() noexcept {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool BSD::IsFileDescriptorValid(s32 fd) const noexcept {
|
|
|
|
bool BSD::IsFileDescriptorValid(s32 fd) const noexcept {
|
|
|
|
if (fd > MAX_FD || fd < 0) {
|
|
|
|
if (fd > static_cast<s32>(MAX_FD) || fd < 0) {
|
|
|
|
LOG_ERROR(Service, "Invalid file descriptor handle={}", fd);
|
|
|
|
LOG_ERROR(Service, "Invalid file descriptor handle={}", fd);
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -809,7 +810,7 @@ bool BSD::IsFileDescriptorValid(s32 fd) const noexcept {
|
|
|
|
bool BSD::IsBlockingSocket(s32 fd) const noexcept {
|
|
|
|
bool BSD::IsBlockingSocket(s32 fd) const noexcept {
|
|
|
|
// Inform invalid sockets as non-blocking
|
|
|
|
// Inform invalid sockets as non-blocking
|
|
|
|
// This way we avoid using a worker thread as it will fail without blocking host
|
|
|
|
// This way we avoid using a worker thread as it will fail without blocking host
|
|
|
|
if (fd > MAX_FD || fd < 0) {
|
|
|
|
if (fd > static_cast<s32>(MAX_FD) || fd < 0) {
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!file_descriptors[fd]) {
|
|
|
|
if (!file_descriptors[fd]) {
|
|
|
|