win32_network.h (1052B)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #pragma once #include <winsock2.h> #include <ws2tcpip.h> struct Socket { SOCKET fd; TransportProtocol transport; IPvX ipvx; }; inline void net_init() { WSADATA wsa_data; if( WSAStartup( MAKEWORD( 2, 2 ), &wsa_data ) == SOCKET_ERROR ) { FATAL( "WSAStartup" ); } } inline void net_term() { if( WSACleanup() == SOCKET_ERROR ) { FATAL( "WSACleanup" ); } } inline void sock_fd_nonblocking( SOCKET fd ) { u_long one = 1; int ok = ioctlsocket( fd, FIONBIO, &one ); if( ok == SOCKET_ERROR ) { FATAL( "ioctlsocket" ); } } inline bool sock_tryrecv_udp( Socket sock, char * buf, size_t len, sockaddr_storage * addr, socklen_t * addr_len, size_t * bytes_received ) { ASSERT( sock.transport == NET_UDP ); int received = recvfrom( sock.fd, buf, checked_cast< int >( len ), 0, ( sockaddr * ) addr, addr_len ); if( received == SOCKET_ERROR ) { int error = WSAGetLastError(); if( error == WSAEWOULDBLOCK || error == WSAECONNRESET ) { return false; } FATAL( "recvfrom" ); } *bytes_received = size_t( received ); return true; } |