mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 02:34:11 +01:00 
			
		
		
		
	internal_network: only poll for accept on blocking sockets
This commit is contained in:
		
							parent
							
								
									8ddfecfbae
								
							
						
					
					
						commit
						5510b31972
					
				| @ -693,20 +693,23 @@ std::pair<SocketBase::AcceptResult, Errno> Socket::Accept() { | |||||||
|     sockaddr_in addr; |     sockaddr_in addr; | ||||||
|     socklen_t addrlen = sizeof(addr); |     socklen_t addrlen = sizeof(addr); | ||||||
| 
 | 
 | ||||||
|     std::vector<WSAPOLLFD> host_pollfds{ |     const bool wait_for_accept = !is_non_blocking; | ||||||
|         WSAPOLLFD{fd, POLLIN, 0}, |     if (wait_for_accept) { | ||||||
|         WSAPOLLFD{GetInterruptSocket(), POLLIN, 0}, |         std::vector<WSAPOLLFD> host_pollfds{ | ||||||
|     }; |             WSAPOLLFD{fd, POLLIN, 0}, | ||||||
|  |             WSAPOLLFD{GetInterruptSocket(), POLLIN, 0}, | ||||||
|  |         }; | ||||||
| 
 | 
 | ||||||
|     while (true) { |         while (true) { | ||||||
|         const int pollres = |             const int pollres = | ||||||
|             WSAPoll(host_pollfds.data(), static_cast<ULONG>(host_pollfds.size()), -1); |                 WSAPoll(host_pollfds.data(), static_cast<ULONG>(host_pollfds.size()), -1); | ||||||
|         if (host_pollfds[1].revents != 0) { |             if (host_pollfds[1].revents != 0) { | ||||||
|             // Interrupt signaled before a client could be accepted, break
 |                 // Interrupt signaled before a client could be accepted, break
 | ||||||
|             return {AcceptResult{}, Errno::AGAIN}; |                 return {AcceptResult{}, Errno::AGAIN}; | ||||||
|         } |             } | ||||||
|         if (pollres > 0) { |             if (pollres > 0) { | ||||||
|             break; |                 break; | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -913,6 +916,7 @@ Errno Socket::SetRcvTimeo(u32 value) { | |||||||
| 
 | 
 | ||||||
| Errno Socket::SetNonBlock(bool enable) { | Errno Socket::SetNonBlock(bool enable) { | ||||||
|     if (EnableNonBlock(fd, enable)) { |     if (EnableNonBlock(fd, enable)) { | ||||||
|  |         is_non_blocking = enable; | ||||||
|         return Errno::SUCCESS; |         return Errno::SUCCESS; | ||||||
|     } |     } | ||||||
|     return GetAndLogLastError(); |     return GetAndLogLastError(); | ||||||
|  | |||||||
| @ -166,6 +166,9 @@ public: | |||||||
|     bool IsOpened() const override; |     bool IsOpened() const override; | ||||||
| 
 | 
 | ||||||
|     void HandleProxyPacket(const ProxyPacket& packet) 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); | std::pair<s32, Errno> Poll(std::vector<PollFD>& poll_fds, s32 timeout); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user