project_files/frontlib/socket.c
branchflibqtfrontend
changeset 8094 6c5b4e69f03d
parent 8091 e0a76056a633
equal deleted inserted replaced
8092:08960209db8c 8094:6c5b4e69f03d
    59 		}
    59 		}
    60 	}
    60 	}
    61 	return result;
    61 	return result;
    62 }
    62 }
    63 
    63 
    64 TCPsocket listen(uint16_t port) {
    64 TCPsocket flib_listen(uint16_t port) {
    65 	IPaddress addr;
    65 	IPaddress addr;
    66 	addr.host = INADDR_ANY;
    66 	addr.host = INADDR_ANY;
    67 	SDLNet_Write16(port, &addr.port);
    67 	SDLNet_Write16(port, &addr.port);
    68 	TCPsocket sock = SDLNet_TCP_Open(&addr);
    68 	TCPsocket sock = SDLNet_TCP_Open(&addr);
    69 	if(!sock) {
    69 	if(!sock) {
    75 flib_acceptor *flib_acceptor_create(uint16_t port) {
    75 flib_acceptor *flib_acceptor_create(uint16_t port) {
    76 	flib_acceptor *result = flib_calloc(1, sizeof(flib_acceptor));
    76 	flib_acceptor *result = flib_calloc(1, sizeof(flib_acceptor));
    77 	if(result) {
    77 	if(result) {
    78 		if(port > 0) {
    78 		if(port > 0) {
    79 			result->port = port;
    79 			result->port = port;
    80 			result->sock = listen(result->port);
    80 			result->sock = flib_listen(result->port);
    81 		} else {
    81 		} else {
    82 			/* SDL_net does not seem to have a way to listen on a random unused port
    82 			/* SDL_net does not seem to have a way to listen on a random unused port
    83 			   and find out which port that is, so let's try to find one ourselves. */
    83 			   and find out which port that is, so let's try to find one ourselves. */
    84 			srand(time(NULL));
    84 			srand(time(NULL));
    85 			for(int i=0; !result->sock && i<1000; i++) {
    85 			for(int i=0; !result->sock && i<1000; i++) {
    86 				// IANA suggests using ports in the range 49152-65535 for things like this
    86 				// IANA suggests using ports in the range 49152-65535 for things like this
    87 				result->port = 49152+(rand()%(65536-49152));
    87 				result->port = 49152+(rand()%(65536-49152));
    88 				result->sock = listen(result->port);
    88 				result->sock = flib_listen(result->port);
    89 			}
    89 			}
    90 		}
    90 		}
    91 		if(!result->sock) {
    91 		if(!result->sock) {
    92 			flib_log_e("Failed to create acceptor.");
    92 			flib_log_e("Failed to create acceptor.");
    93 			free(result);
    93 			free(result);