-static bool bind_to_address(meshlink_handle_t *mesh, connection_t *c) {
- int s = -1;
-
- for(int i = 0; i < mesh->listen_sockets && mesh->listen_socket[i].bindto; i++) {
- if(mesh->listen_socket[i].sa.sa.sa_family != c->address.sa.sa_family) {
- continue;
- }
-
- if(s >= 0) {
- return false;
- }
-
- s = i;
- }
-
- if(s < 0) {
- return false;
- }
-
- sockaddr_t sa = mesh->listen_socket[s].sa;
-
- if(sa.sa.sa_family == AF_INET) {
- sa.in.sin_port = 0;
- } else if(sa.sa.sa_family == AF_INET6) {
- sa.in6.sin6_port = 0;
- }
-
- if(bind(c->socket, &sa.sa, SALEN(sa.sa))) {
- logger(mesh, MESHLINK_WARNING, "Can't bind outgoing socket: %s", strerror(errno));
- return false;
- }
-
- return true;
-}
-
-int setup_listen_socket(const sockaddr_t *sa) {
- int nfd;
- char *addrstr;
- int option;
-
- nfd = socket(sa->sa.sa_family, SOCK_STREAM, IPPROTO_TCP);
-
- if(nfd < 0) {
- logger(NULL, MESHLINK_ERROR, "Creating metasocket failed: %s", sockstrerror(sockerrno));
- return -1;
- }
-