X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fmeshlink.c;h=6fd89daded547d5ad2ad6045d55540fc2cfd4a17;hb=b5aaabe0fcb104ef7801a68f4f9e6b77732dbb28;hp=07c518e0dd8c8c112aea2f85a84a756947998005;hpb=18c0a32a4de44adfeee6be42d1c1ae231d093cbf;p=meshlink diff --git a/src/meshlink.c b/src/meshlink.c index 07c518e0..6fd89dad 100644 --- a/src/meshlink.c +++ b/src/meshlink.c @@ -537,26 +537,33 @@ static bool try_bind(int port) { return false; } - //while(ai) { + bool success = false; + for(struct addrinfo *aip = ai; aip; aip = aip->ai_next) { + if(!(aip->ai_family == AF_INET || aip->ai_family == AF_INET6)) { + continue; + } + int fd = socket(aip->ai_family, SOCK_STREAM, IPPROTO_TCP); - if(!fd) { - freeaddrinfo(ai); - return false; + if(fd == -1) { + success = false; + break; } int result = bind(fd, aip->ai_addr, aip->ai_addrlen); closesocket(fd); if(result) { - freeaddrinfo(ai); - return false; + success = false; + break; + } else { + success = true; } } freeaddrinfo(ai); - return true; + return success; } static int check_port(meshlink_handle_t *mesh) { @@ -1558,9 +1565,6 @@ static void *meshlink_main_loop(void *arg) { } bool meshlink_start(meshlink_handle_t *mesh) { - assert(mesh->self); - assert(mesh->private_key); - if(!mesh) { meshlink_errno = MESHLINK_EINVAL; return false; @@ -1570,6 +1574,8 @@ bool meshlink_start(meshlink_handle_t *mesh) { pthread_mutex_lock(&mesh->mutex); + assert(mesh->self); + assert(mesh->private_key); assert(mesh->self->ecdsa); assert(!memcmp((uint8_t *)mesh->self->ecdsa + 64, (uint8_t *)mesh->private_key + 64, 32)); @@ -2279,7 +2285,7 @@ bool meshlink_sign(meshlink_handle_t *mesh, const void *data, size_t len, void * } bool meshlink_verify(meshlink_handle_t *mesh, meshlink_node_t *source, const void *data, size_t len, const void *signature, size_t siglen) { - if(!mesh || !data || !len || !signature) { + if(!mesh || !source || !data || !len || !signature) { meshlink_errno = MESHLINK_EINVAL; return false; }