uslip/uslip.c: Abstract out the server's EOF-on-stdin behaviour.
authorMark Wooding <mdw@distorted.org.uk>
Mon, 17 Apr 2017 23:39:24 +0000 (00:39 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sun, 23 Apr 2017 03:13:33 +0000 (04:13 +0100)
uslip/uslip.c

index 7752458..853df5b 100644 (file)
@@ -461,6 +461,16 @@ static void done_slip_dribble(dribbler *d, int err, void *hunoz)
     cripple_dribbler(d);
 }
 
+static void close_slip(int fd)
+{
+  switch (slipstate) {
+    case SYNC1: case SYNC2: case START: case BAD: break;
+    default: moan("eof found while processing packet (discarding)"); break;
+  }
+  close(fd); sel_rmfile(&slip_in);
+  reasons--;
+}
+
 static void do_slip_in(int fd, unsigned mode, void *hunoz)
 {
   ssize_t i, n;
@@ -477,19 +487,7 @@ static void do_slip_in(int fd, unsigned mode, void *hunoz)
   for (;;) {
     n = read(fd, buf, sizeof(buf));
     if (n == 0) {
-      switch (slipstate) {
-       case SYNC1:
-       case SYNC2:
-       case START:
-       case BAD:
-         break;
-       default:
-         moan("eof found while processing packet (discarding)");
-         break;
-      }
-      close(fd);
-      sel_rmfile(&slip_in);
-      reasons--;
+      close_slip(fd);
       return;
     } else if (n < 0) {
       if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR)