void RNS2_Berkley::RecvFromBlockingIPV4(RNS2RecvStruct *recvFromStruct) { sockaddr* sockAddrPtr; socklen_t sockLen; socklen_t* socketlenPtr=(socklen_t*) &sockLen; sockaddr_in sa; memset(&sa,0,sizeof(sockaddr_in)); const int flag=0; { sockLen=sizeof(sa); sa.sin_family = AF_INET; sa.sin_port=0; sockAddrPtr=(sockaddr*) &sa; } recvFromStruct->bytesRead = recvfrom__( GetSocket(), recvFromStruct->data, sizeof(recvFromStruct->data), flag, sockAddrPtr, socketlenPtr ); if (recvFromStruct->bytesRead<=0) { /* DWORD dwIOError = WSAGetLastError(); if ( dwIOError == WSAECONNRESET ) { #if defined(_DEBUG) RAKNET_DEBUG_PRINTF( "A previous send operation resulted in an ICMP Port Unreachable message.\n" ); #endif } else if ( dwIOError != WSAEWOULDBLOCK && dwIOError != WSAEADDRNOTAVAIL) { #if defined(_WIN32) && !defined(_XBOX) && !defined(_XBOX_720_COMPILE_AS_WINDOWS) && !defined(X360) && defined(_DEBUG) && !defined(_XBOX_720_COMPILE_AS_WINDOWS) LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); // something has gone wrong here... RAKNET_DEBUG_PRINTF( "sendto failed:Error code - %d\n%s", dwIOError, messageBuffer ); //Free the buffer. LocalFree( messageBuffer ); #endif } */ return; } recvFromStruct->timeRead=RakNet::GetTimeUS(); { recvFromStruct->systemAddress.SetPortNetworkOrder( sa.sin_port ); recvFromStruct->systemAddress.address.addr4.sin_addr.s_addr=sa.sin_addr.s_addr; } // printf("--- Got %i bytes from %s\n", recvFromStruct->bytesRead, recvFromStruct->systemAddress.ToString()); }
void RNS2_Berkley::RecvFromBlockingIPV4(RNS2RecvStruct *recvFromStruct) { sockaddr* sockAddrPtr; socklen_t sockLen; socklen_t* socketlenPtr=(socklen_t*) &sockLen; sockaddr_in sa; memset(&sa,0,sizeof(sockaddr_in)); const int flag=0; { sockLen=sizeof(sa); sa.sin_family = AF_INET; sa.sin_port=0; sockAddrPtr=(sockaddr*) &sa; } recvFromStruct->bytesRead = recvfrom__( GetSocket(), recvFromStruct->data, sizeof(recvFromStruct->data), flag, sockAddrPtr, socketlenPtr ); if (recvFromStruct->bytesRead<=0) return; recvFromStruct->timeRead=RakNet::GetTimeUS(); { recvFromStruct->systemAddress.SetPortNetworkOrder( sa.sin_port ); recvFromStruct->systemAddress.address.addr4.sin_addr.s_addr=sa.sin_addr.s_addr; } }
void RNS2_Berkley::RecvFromBlockingIPV4And6(RNS2RecvStruct *recvFromStruct) { #if RAKNET_SUPPORT_IPV6==1 sockaddr_storage their_addr; sockaddr* sockAddrPtr; socklen_t sockLen; socklen_t* socketlenPtr=(socklen_t*) &sockLen; memset(&their_addr,0,sizeof(their_addr)); int dataOutSize; const int flag=0; { sockLen=sizeof(their_addr); sockAddrPtr=(sockaddr*) &their_addr; } dataOutSize=MAXIMUM_MTU_SIZE; recvFromStruct->bytesRead = recvfrom__(rns2Socket, recvFromStruct->data, dataOutSize, flag, sockAddrPtr, socketlenPtr ); if (recvFromStruct->bytesRead<=0) return; recvFromStruct->timeRead=RakNet::GetTimeUS(); { if (their_addr.ss_family==AF_INET) { memcpy(&recvFromStruct->systemAddress.address.addr4,(sockaddr_in *)&their_addr,sizeof(sockaddr_in)); recvFromStruct->systemAddress.debugPort=ntohs(recvFromStruct->systemAddress.address.addr4.sin_port); // systemAddressOut->address.addr4.sin_port=ntohs( systemAddressOut->address.addr4.sin_port ); } else { memcpy(&recvFromStruct->systemAddress.address.addr6,(sockaddr_in6 *)&their_addr,sizeof(sockaddr_in6)); recvFromStruct->systemAddress.debugPort=ntohs(recvFromStruct->systemAddress.address.addr6.sin6_port); // systemAddressOut->address.addr6.sin6_port=ntohs( systemAddressOut->address.addr6.sin6_port ); } } #else (void) recvFromStruct; #endif }
void RNS2_Berkley::RecvFromBlockingIPV4And6(RNS2RecvStruct *recvFromStruct) { #if RAKNET_SUPPORT_IPV6==1 sockaddr_storage their_addr; sockaddr* sockAddrPtr; socklen_t sockLen; socklen_t* socketlenPtr=(socklen_t*) &sockLen; memset(&their_addr,0,sizeof(their_addr)); int dataOutSize; const int flag=0; { sockLen=sizeof(their_addr); sockAddrPtr=(sockaddr*) &their_addr; } dataOutSize=MAXIMUM_MTU_SIZE; recvFromStruct->bytesRead = recvfrom__(rns2Socket, recvFromStruct->data, dataOutSize, flag, sockAddrPtr, socketlenPtr ); #if defined(_WIN32) && defined(_DEBUG) && !defined(WINDOWS_PHONE_8) if (recvFromStruct->bytesRead==-1) { DWORD dwIOError = GetLastError(); if (dwIoError != 10035) { LPVOID messageBuffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwIOError, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), // Default language ( LPTSTR ) & messageBuffer, 0, NULL ); // I see this hit on XP with IPV6 for some reason RAKNET_DEBUG_PRINTF( "Warning: recvfrom failed:Error code - %d\n%s", dwIOError, messageBuffer ); LocalFree( messageBuffer ); } } #endif if (recvFromStruct->bytesRead<=0) return; recvFromStruct->timeRead=RakNet::GetTimeUS(); { if (their_addr.ss_family==AF_INET) { memcpy(&recvFromStruct->systemAddress.address.addr4,(sockaddr_in *)&their_addr,sizeof(sockaddr_in)); recvFromStruct->systemAddress.debugPort=ntohs(recvFromStruct->systemAddress.address.addr4.sin_port); // systemAddressOut->address.addr4.sin_port=ntohs( systemAddressOut->address.addr4.sin_port ); } else { memcpy(&recvFromStruct->systemAddress.address.addr6,(sockaddr_in6 *)&their_addr,sizeof(sockaddr_in6)); recvFromStruct->systemAddress.debugPort=ntohs(recvFromStruct->systemAddress.address.addr6.sin6_port); // systemAddressOut->address.addr6.sin6_port=ntohs( systemAddressOut->address.addr6.sin6_port ); } } #else (void) recvFromStruct; #endif }