chiark / gitweb /
server/peer.c, server/tripe.c: Add `p_unbind' to tear down the UDP sockets.
[tripe] / server / peer.c
index 5855f2e18fde5a1208b71c0aef5776662b563339..f723cccb4da1ce81a1ef1378739936b82d1d1584 100644 (file)
@@ -894,6 +894,32 @@ void p_bind(struct addrinfo *ailist)
 
 }
 
+/* --- @p_unbind@ --- *
+ *
+ * Arguments:  ---
+ *
+ * Returns:    ---
+ *
+ * Use:                Unbinds the UDP sockets.  There must not be any active peers,
+ *             and none can be created until the sockets are rebound.
+ */
+
+void p_unbind(void)
+{
+  int i;
+
+#ifndef NDEBUG
+  { peer_iter it; p_mkiter(&it); assert(!p_next(&it)); }
+#endif
+
+  for (i = 0; i < NADDRFAM; i++) {
+    if (udpsock[i].sf.fd == -1) continue;
+    sel_rmfile(&udpsock[i].sf);
+    close(udpsock[i].sf.fd);
+    udpsock[i].sf.fd = -1;
+  }
+}
+
 /* --- @p_init@ --- *
  *
  * Arguments:  ---