]> git.meshlink.io Git - catta/blobdiff - src/server.c
fix backend #705
[catta] / src / server.c
index 1dda8b4545edfe6481557873588365b878fe00bb..b3971962df5bb719742e3e61583db76471c90aa9 100644 (file)
@@ -849,7 +849,7 @@ static int originates_from_local_legacy_unicast_socket(CattaServer *s, const Cat
         socklen_t l = sizeof(lsa);
 
         if (getsockname(s->fd_legacy_unicast_ipv4, (struct sockaddr*) &lsa, &l) != 0)
-            catta_log_warn("getsockname(): %s", strerror(errno));
+            catta_log_warn("getsockname(): %s", errnostrsocket());
         else
             return catta_port_from_sockaddr((struct sockaddr*) &lsa) == port;
 
@@ -860,7 +860,7 @@ static int originates_from_local_legacy_unicast_socket(CattaServer *s, const Cat
         socklen_t l = sizeof(lsa);
 
         if (getsockname(s->fd_legacy_unicast_ipv6, (struct sockaddr*) &lsa, &l) != 0)
-            catta_log_warn("getsockname(): %s", strerror(errno));
+            catta_log_warn("getsockname(): %s", errnostrsocket());
         else
             return catta_port_from_sockaddr((struct sockaddr*) &lsa) == port;
     }
@@ -899,9 +899,12 @@ static void dispatch_packet(CattaServer *s, CattaDnsPacket *p, const CattaAddres
     assert(iface > 0);
     assert(src_address->proto == dst_address->proto);
 
-    if (!(i = catta_interface_monitor_get_interface(s->monitor, iface, src_address->proto)) ||
-        !i->announcing) {
-        catta_log_warn("Received packet from invalid interface.");
+    if (!(i = catta_interface_monitor_get_interface(s->monitor, iface, src_address->proto))) {
+        catta_log_warn("Received packet from unrecognized interface (%d).", iface);
+        return;
+    }
+    if (!i->announcing) {
+        catta_log_warn("Received packet from invalid interface %d (not announcing).", iface);
         return;
     }
 
@@ -1217,7 +1220,7 @@ static void register_stuff(CattaServer *s) {
     assert(s);
 
     server_set_state(s, CATTA_SERVER_REGISTERING);
-    s->n_host_rr_pending ++; /** Make sure that the state isn't changed tp CATTA_SERVER_RUNNING too early */
+    s->n_host_rr_pending ++; /** Make sure that the state isn't changed to CATTA_SERVER_RUNNING too early */
 
     register_hinfo(s);
     register_browse_domain(s);
@@ -1225,9 +1228,6 @@ static void register_stuff(CattaServer *s) {
 
     assert(s->n_host_rr_pending > 0);
     s->n_host_rr_pending --;
-
-    if (s->n_host_rr_pending == 0)
-        server_set_state(s, CATTA_SERVER_RUNNING);
 }
 
 static void update_fqdn(CattaServer *s) {
@@ -1381,12 +1381,14 @@ CattaServer *catta_server_new(const CattaPoll *poll_api, const CattaServerConfig
     else
         catta_server_config_init(&s->config);
 
+    winsock_init();  // on Windows, call WSAStartup; no-op on other platforms
     if ((e = setup_sockets(s)) < 0) {
         if (error)
             *error = e;
 
         catta_server_config_free(&s->config);
         catta_free(s);
+        winsock_exit();
 
         return NULL;
     }
@@ -1533,6 +1535,7 @@ void catta_server_free(CattaServer* s) {
     catta_server_config_free(&s->config);
 
     catta_free(s);
+    winsock_exit();  // on Windows, call WSACleanup(); no-op on other platforms
 }
 
 const char* catta_server_get_domain_name(CattaServer *s) {