Browse Source
Merge pull request #12858 from liamwhite/non-blocking
internal_network: only poll for accept on blocking sockets
pull/15/merge
Narr the Reg
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with
21 additions and
14 deletions
-
src/core/internal_network/network.cpp
-
src/core/internal_network/sockets.h
|
|
|
@ -693,6 +693,8 @@ std::pair<SocketBase::AcceptResult, Errno> Socket::Accept() { |
|
|
|
sockaddr_in addr; |
|
|
|
socklen_t addrlen = sizeof(addr); |
|
|
|
|
|
|
|
const bool wait_for_accept = !is_non_blocking; |
|
|
|
if (wait_for_accept) { |
|
|
|
std::vector<WSAPOLLFD> host_pollfds{ |
|
|
|
WSAPOLLFD{fd, POLLIN, 0}, |
|
|
|
WSAPOLLFD{GetInterruptSocket(), POLLIN, 0}, |
|
|
|
@ -709,6 +711,7 @@ std::pair<SocketBase::AcceptResult, Errno> Socket::Accept() { |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const SOCKET new_socket = accept(fd, reinterpret_cast<sockaddr*>(&addr), &addrlen); |
|
|
|
|
|
|
|
@ -913,6 +916,7 @@ Errno Socket::SetRcvTimeo(u32 value) { |
|
|
|
|
|
|
|
Errno Socket::SetNonBlock(bool enable) { |
|
|
|
if (EnableNonBlock(fd, enable)) { |
|
|
|
is_non_blocking = enable; |
|
|
|
return Errno::SUCCESS; |
|
|
|
} |
|
|
|
return GetAndLogLastError(); |
|
|
|
|
|
|
|
@ -166,6 +166,9 @@ public: |
|
|
|
bool IsOpened() const override; |
|
|
|
|
|
|
|
void HandleProxyPacket(const ProxyPacket& packet) override; |
|
|
|
|
|
|
|
private: |
|
|
|
bool is_non_blocking = false; |
|
|
|
}; |
|
|
|
|
|
|
|
std::pair<s32, Errno> Poll(std::vector<PollFD>& poll_fds, s32 timeout); |
|
|
|
|