示例#1
0
uint16_t UDPNetworkSocket::getPort() const {
	if(data->port > 0)
		return data->port;
#ifdef UTIL_HAVE_LIB_SDL2_NET
	IPaddress* sdlAddress = SDLNet_UDP_GetPeerAddress(data->udpsock, -1);
	if(!sdlAddress) {
		std::cerr << "SDLNet_UDP_GetPeerAddress: " << SDLNet_GetError() << "\n";
		return 0;
	}
	IPv4Address address = fromSDLIPv4Address(*sdlAddress);
	return address.getPort();
#elif defined(__linux__) || defined(__unix__) || defined(ANDROID)
	struct sockaddr_in localAddress;
	socklen_t addressLength = sizeof(localAddress);
	if(getsockname(data->udpSocket, reinterpret_cast<struct sockaddr*>(&localAddress), &addressLength)) {
		int error = errno;
		WARN(std::string(strerror(error)));
		return 0;
	}
	IPv4Address address = fromSockaddr(localAddress);
	return address.getPort();
#else
	return 0;
#endif
}