getting reassembly to work
[unix-history] / usr / src / sys / kern / uipc_socket2.c
index e4583e3..dc2ec8c 100644 (file)
@@ -1,4 +1,4 @@
-/*     uipc_socket2.c  4.18    82/01/19        */
+/*     uipc_socket2.c  4.20    82/01/19        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -53,6 +53,8 @@ soisconnected(so)
        so->so_state &= ~(SS_ISCONNECTING|SS_ISDISCONNECTING);
        so->so_state |= SS_ISCONNECTED;
        wakeup((caddr_t)&so->so_timeo);
        so->so_state &= ~(SS_ISCONNECTING|SS_ISDISCONNECTING);
        so->so_state |= SS_ISCONNECTED;
        wakeup((caddr_t)&so->so_timeo);
+       sorwakeup(so);
+       sowwakeup(so);
 }
 
 soisdisconnecting(so)
 }
 
 soisdisconnecting(so)
@@ -115,21 +117,27 @@ soselect(so, rw)
        register struct socket *so;
        int rw;
 {
        register struct socket *so;
        int rw;
 {
+       int s = splnet();
 
        switch (rw) {
 
        case FREAD:
 
        switch (rw) {
 
        case FREAD:
-               if (soreadable(so))
+               if (soreadable(so)) {
+                       splx(s);
                        return (1);
                        return (1);
+               }
                sbselqueue(&so->so_rcv);
                break;
 
        case FWRITE:
                sbselqueue(&so->so_rcv);
                break;
 
        case FWRITE:
-               if (sowriteable(so))
+               if (sowriteable(so)) {
+                       splx(s);
                        return (1);
                        return (1);
+               }
                sbselqueue(&so->so_snd);
                break;
        }
                sbselqueue(&so->so_snd);
                break;
        }
+       splx(s);
        return (0);
 }
 
        return (0);
 }
 
@@ -310,7 +318,7 @@ sbappendaddr(sb, asa, m0)
        }
        if (len > sbspace(sb))
                return (0);
        }
        if (len > sbspace(sb))
                return (0);
-       m = m_get(0);
+       m = m_get(M_DONTWAIT);
        if (m == 0)
                return (0);
        m->m_off = MMINOFF;
        if (m == 0)
                return (0);
        m->m_off = MMINOFF;