wake up sleepers when error is detected
authorMike Karels <karels@ucbvax.Berkeley.EDU>
Mon, 1 Dec 1986 14:17:22 +0000 (06:17 -0800)
committerMike Karels <karels@ucbvax.Berkeley.EDU>
Mon, 1 Dec 1986 14:17:22 +0000 (06:17 -0800)
SCCS-vsn: sys/netinet/tcp_subr.c 7.2

usr/src/sys/netinet/tcp_subr.c

index 179353f..5b46127 100644 (file)
@@ -3,7 +3,7 @@
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *     @(#)tcp_subr.c  7.1 (Berkeley) %G%
+ *     @(#)tcp_subr.c  7.2 (Berkeley) %G%
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -230,6 +230,18 @@ tcp_drain()
 
 }
 
 
 }
 
+/*
+ * Notify a tcp user of an asynchronous error;
+ * just wake up so that he can collect error status.
+ */
+tcp_notify(inp)
+       register struct inpcb *inp;
+{
+
+       wakeup((caddr_t) &inp->inp_socket->so_timeo);
+       sorwakeup(inp->inp_socket);
+       sowwakeup(inp->inp_socket);
+}
 tcp_ctlinput(cmd, sa)
        int cmd;
        struct sockaddr *sa;
 tcp_ctlinput(cmd, sa)
        int cmd;
        struct sockaddr *sa;
@@ -264,7 +276,7 @@ tcp_ctlinput(cmd, sa)
                if (inetctlerrmap[cmd] == 0)
                        return;         /* XXX */
                in_pcbnotify(&tcb, &sin->sin_addr, (int)inetctlerrmap[cmd],
                if (inetctlerrmap[cmd] == 0)
                        return;         /* XXX */
                in_pcbnotify(&tcb, &sin->sin_addr, (int)inetctlerrmap[cmd],
-                       (int (*)())0);
+                       tcp_notify);
        }
 }
 
        }
 }