equal
deleted
inserted
replaced
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); |