File diff r24440:3295012a081c → r24441:8ae6bf969767
src/network/core/os_abstraction.h
Show inline comments
 
@@ -142,24 +142,46 @@ struct sockaddr_in6 {
 
	uint32_t        sin6_flowinfo;  /* IP6 flow information */
 
	struct in6_addr sin6_addr;      /* IP6 address */
 
	uint32_t        sin6_scope_id;  /* scope zone index */
 
};
 

	
 
typedef int socklen_t;
 
#if !defined(__INNOTEK_LIBC__)
 
typedef unsigned long in_addr_t;
 
#endif /* __INNOTEK_LIBC__ */
 

	
 
#endif /* OS/2 */
 

	
 
#ifdef __EMSCRIPTEN__
 
/**
 
 * Emscripten doesn't set 'addrlen' for accept(), getsockname(), getpeername()
 
 * and recvfrom(), which confuses other functions and causes them to crash.
 
 * This function needs to be called after these four functions to make sure
 
 * 'addrlen' is patched up.
 
 *
 
 * https://github.com/emscripten-core/emscripten/issues/12996
 
 *
 
 * @param address The address returned by those four functions.
 
 * @return The correct value for addrlen.
 
 */
 
static inline socklen_t FixAddrLenForEmscripten(struct sockaddr_storage &address)
 
{
 
	switch (address.ss_family) {
 
		case AF_INET6: return sizeof(struct sockaddr_in6);
 
		case AF_INET: return sizeof(struct sockaddr_in);
 
		default: NOT_REACHED();
 
	}
 
}
 
#endif
 

	
 
/**
 
 * Try to set the socket into non-blocking mode.
 
 * @param d The socket to set the non-blocking more for.
 
 * @return True if setting the non-blocking mode succeeded, otherwise false.
 
 */
 
static inline bool SetNonBlocking(SOCKET d)
 
{
 
#ifdef __EMSCRIPTEN__
 
	return true;
 
#else
 
#	ifdef _WIN32
 
	u_long nonblocking = 1;