moved_client * moved_client_create(const char *hostname) { psmove_port_initialize_sockets(); moved_client *client = (moved_client*)calloc(1, sizeof(moved_client)); client->request_buf.header.request_sequence = 1; client->hostname = strdup(hostname); client->socket = (int)socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); assert(client->socket != -1); psmove_port_set_socket_timeout_ms(client->socket, MOVED_TIMEOUT_MS); client->moved_addr.sin_family = AF_INET; client->moved_addr.sin_port = htons(MOVED_UDP_PORT); client->moved_addr.sin_addr.s_addr = inet_addr(hostname); // If hostname failed to convert to an address, it's probably an actual name, so try to resolve the name to IP if (client->moved_addr.sin_addr.s_addr == INADDR_NONE) { struct hostent *remoteHost = gethostbyname(hostname); if (remoteHost->h_addrtype == AF_INET) client->moved_addr.sin_addr.s_addr = *(u_long *)remoteHost->h_addr_list[0]; } //assert(client->moved_addr.sin_addr.s_addr != INADDR_NONE); return client; }
moved_server::moved_server() { psmove_port_initialize_sockets(); socket = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); assert(socket != -1); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(MOVED_UDP_PORT); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(socket, (struct sockaddr *)&(server_addr), sizeof(server_addr)) == -1) { fprintf(stderr, "Could not bind to UDP port %d", MOVED_UDP_PORT); exit(1); } }