Open lovelyelfpop opened 4 years ago
If port is 0, can the server bind to a random free port?
Android
private static int findFreePort() { ServerSocket socket = null; try { socket = new ServerSocket(0); socket.setReuseAddress(true); int port = socket.getLocalPort(); try { socket.close(); } catch (IOException e) { // Ignore IOException on close() } return port; } catch (IOException e) { } finally { if (socket != null) { try { socket.close(); } catch (IOException e) { } } } throw new IllegalStateException("Could not find a free TCP/IP port to start embedded Jetty HTTP Server on"); }
iOS
#import <netinet/in.h> - (NSUInteger) _availablePort { struct sockaddr_in addr4; bzero(&addr4, sizeof(addr4)); addr4.sin_len = sizeof(addr4); addr4.sin_family = AF_INET; addr4.sin_port = 0; // set to 0 and bind to find available port addr4.sin_addr.s_addr = htonl(INADDR_ANY); int listeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (bind(listeningSocket, (const void*)&addr4, sizeof(addr4)) == 0) { struct sockaddr addr; socklen_t addrlen = sizeof(addr); if (getsockname(listeningSocket, &addr, &addrlen) == 0) { struct sockaddr_in* sockaddr = (struct sockaddr_in*)&addr; close(listeningSocket); return ntohs(sockaddr->sin_port); } } return 0; }
This would be really helpful
If port is 0, can the server bind to a random free port?
Android
iOS