diff --git a/engine/common/net_ws.c b/engine/common/net_ws.c index 3e88d3ff..5c607923 100644 --- a/engine/common/net_ws.c +++ b/engine/common/net_ws.c @@ -132,7 +132,7 @@ static CVAR_DEFINE_AUTO( net6_address, "0", FCVAR_PRIVILEGED|FCVAR_READ_ONLY, "c static void NET_ClearLagData( qboolean bClient, qboolean bServer ); -static inline qboolean NET_IsSocketError( int retval ) +qboolean NET_IsSocketError( int retval ) { #if XASH_WIN32 || XASH_DOS4GW return retval == SOCKET_ERROR ? true : false; @@ -141,7 +141,7 @@ static inline qboolean NET_IsSocketError( int retval ) #endif } -static inline qboolean NET_IsSocketValid( int socket ) +qboolean NET_IsSocketValid( int socket ) { #if XASH_WIN32 || XASH_DOS4GW return socket != INVALID_SOCKET; @@ -150,6 +150,19 @@ static inline qboolean NET_IsSocketValid( int socket ) #endif } +qboolean NET_MakeSocketNonBlocking( int socket_fd ) +{ +#if XASH_WIN32 || XASH_PSVITA + u_long flag = 1; + if( NET_IsSocketError( ioctlsocket( socket_fd, FIONBIO, &flag ))) + return false; +#else + if( NET_IsSocketError( fcntl( socket_fd, F_SETFL, O_NONBLOCK ))) + return false; +#endif + return true; +} + void NET_NetadrToIP6Bytes( uint8_t *ip6, const netadr_t *adr ) { memcpy( &ip6[0], adr->ip6_0, 2 ); @@ -177,7 +190,7 @@ static int NET_NetadrIP6Compare( const netadr_t *a, const netadr_t *b ) NET_NetadrToSockadr ==================== */ -static void NET_NetadrToSockadr( netadr_t *a, struct sockaddr_storage *s ) +void NET_NetadrToSockadr( netadr_t *a, struct sockaddr_storage *s ) { netadrtype_t type = NET_NetadrType( a ); @@ -214,7 +227,7 @@ static void NET_NetadrToSockadr( netadr_t *a, struct sockaddr_storage *s ) NET_SockadrToNetAdr ==================== */ -static void NET_SockadrToNetadr( const struct sockaddr_storage *s, netadr_t *a ) +void NET_SockadrToNetadr( const struct sockaddr_storage *s, netadr_t *a ) { if( s->ss_family == AF_INET ) { diff --git a/engine/common/net_ws.h b/engine/common/net_ws.h index 4f276d28..65e9b4c9 100644 --- a/engine/common/net_ws.h +++ b/engine/common/net_ws.h @@ -74,6 +74,9 @@ void NET_SendPacket( netsrc_t sock, size_t length, const void *data, netadr_t to void NET_SendPacketEx( netsrc_t sock, size_t length, const void *data, netadr_t to, size_t splitsize ); void NET_IP6BytesToNetadr( netadr_t *adr, const uint8_t *ip6 ); void NET_NetadrToIP6Bytes( uint8_t *ip6, const netadr_t *adr ); +qboolean NET_IsSocketError( int retval ); +qboolean NET_IsSocketValid( int socket ); +qboolean NET_MakeSocketNonBlocking( int socket_fd ); static inline qboolean NET_IsLocalAddress( netadr_t adr ) { diff --git a/engine/common/net_ws_private.h b/engine/common/net_ws_private.h index 16ad622f..6af7e3d4 100644 --- a/engine/common/net_ws_private.h +++ b/engine/common/net_ws_private.h @@ -101,3 +101,5 @@ static inline socklen_t NET_SockAddrLen( const struct sockaddr_storage *addr ) } net_gai_state_t NET_StringToSockaddr( const char *s, struct sockaddr_storage *sadr, qboolean nonblocking, int family ); +void NET_NetadrToSockadr( netadr_t *a, struct sockaddr_storage *s ); +void NET_SockadrToNetadr( const struct sockaddr_storage *s, netadr_t *a );