]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink.c
Further improve try_bind().
[meshlink] / src / meshlink.c
index 6fd89daded547d5ad2ad6045d55540fc2cfd4a17..4e32761fa1b30fcbf5713fa46db005383a517453 100644 (file)
@@ -540,25 +540,33 @@ static bool try_bind(int port) {
        bool success = false;
 
        for(struct addrinfo *aip = ai; aip; aip = aip->ai_next) {
-               if(!(aip->ai_family == AF_INET || aip->ai_family == AF_INET6)) {
+               int tcp_fd = socket(aip->ai_family, SOCK_STREAM, IPPROTO_TCP);
+
+               if(tcp_fd == -1) {
                        continue;
                }
 
-               int fd = socket(aip->ai_family, SOCK_STREAM, IPPROTO_TCP);
+               int result = bind(tcp_fd, aip->ai_addr, aip->ai_addrlen);
+               closesocket(tcp_fd);
 
-               if(fd == -1) {
-                       success = false;
-                       break;
+               if(result) {
+                       continue;
                }
 
-               int result = bind(fd, aip->ai_addr, aip->ai_addrlen);
-               closesocket(fd);
+               int udp_fd = socket(aip->ai_family, SOCK_DGRAM, IPPROTO_UDP);
+
+               if(udp_fd == -1) {
+                       continue;
+               }
+
+               result = bind(udp_fd, aip->ai_addr, aip->ai_addrlen);
+               closesocket(udp_fd);
 
                if(result) {
-                       success = false;
-                       break;
+                       continue;
                } else {
                        success = true;
+                       break;
                }
        }