chiark / gitweb /
udp: Break out udp_destroy_socket
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 26 Sep 2014 18:26:49 +0000 (19:26 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 29 Sep 2014 15:20:01 +0000 (16:20 +0100)
polypath is are going to want this.  No functional change.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
comm-common.h
udp.c

index 97488556d6bd1ccc2b658c1bd2ddc256725e6e6b..a9445e0fa71f0eb3d0d0cad94f09c931850e7f7c 100644 (file)
@@ -78,6 +78,9 @@ bool_t udp_make_socket(struct udpcommon *uc, struct udpsock *us,
                       int failmsgclass);
   /* Fills in us->fd.  Logs any errors with lg_[v]perror. */
 
+void udp_destroy_socket(struct udpcommon *uc, struct udpsock *us);
+  /* Idempotent.  No errors are possible. */
+
 void udp_socks_register(struct udpcommon *uc, struct udpsocks *socks);
 void udp_socks_deregister(struct udpcommon *uc, struct udpsocks *socks);
 
diff --git a/udp.c b/udp.c
index 5a363e0f4c5d22fc6c4eca25cfa581813094127b..85de96116bbee3cf218e9c9d2afd12a820c1a917 100644 (file)
--- a/udp.c
+++ b/udp.c
@@ -174,11 +174,20 @@ static bool_t udp_sendmsg(void *commst, struct buffer_if *buf,
     return True;
 }
 
+void udp_destroy_socket(struct udpcommon *uc, struct udpsock *us)
+{
+    if (us->fd>=0) {
+       close(us->fd);
+       us->fd=-1;
+    }
+}
+
 bool_t udp_make_socket(struct udpcommon *uc, struct udpsock *us,
                       int failmsgclass)
 {
     const union iaddr *addr=&us->addr;
     struct commcommon *cc=&uc->cc;
+    us->fd=-1;
 
 #define FAIL_LG 0, cc->cl.description, &cc->loc, failmsgclass
 #define FAIL(...) do{                                          \
@@ -259,10 +268,7 @@ bool_t udp_make_socket(struct udpcommon *uc, struct udpsock *us,
     return True;
 
 failed:
-    if (us->fd>=0) {
-       close(us->fd);
-       us->fd=-1;
-    }
+    udp_destroy_socket(uc,us);
     return False;
 
 #undef FAIL