/** ** Open an UDP Socket port. ** ** @param port !=0 Port to bind in host notation. ** ** @return If success the socket fildes, -1 otherwise. */ Socket NetOpenUDP(int port) { Socket sockfd; // open the socket sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd == INVALID_SOCKET) { return (Socket)-1; } // bind local port if (port) { struct sockaddr_in sock_addr; memset(&sock_addr, 0, sizeof(sock_addr)); sock_addr.sin_family = AF_INET; sock_addr.sin_addr.s_addr = INADDR_ANY; sock_addr.sin_port = htons(port); // Bind the socket for listening if (bind(sockfd, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0) { fprintf(stderr, "Couldn't bind to local port\n"); NetCloseUDP(sockfd); return (Socket)-1; } NetLastHost = sock_addr.sin_addr.s_addr; NetLastPort = sock_addr.sin_port; } return sockfd; }
/** ** Open an UDP Socket port. ** ** @param ip !=0 Ip to bind in host notation. ** @param port !=0 Port to bind in host notation. ** ** @return If success the socket fildes, -1 otherwise. */ Socket NetOpenUDP(unsigned long ip, int port) { // open the socket Socket sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd == INVALID_SOCKET) { return static_cast<Socket>(-1); } // bind local port if (port) { struct sockaddr_in sock_addr; memset(&sock_addr, 0, sizeof(sock_addr)); sock_addr.sin_family = AF_INET; sock_addr.sin_addr.s_addr = ip; sock_addr.sin_port = port; // Bind the socket for listening if (bind(sockfd, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0) { fprintf(stderr, "Couldn't bind to local port\n"); NetCloseUDP(sockfd); return static_cast<Socket>(-1); } } return sockfd; }
void Close() { NetCloseUDP(socket); socket = Socket(-1); }