bwrite shouldn't clear B_AGE or brelse won't put it at the head
[unix-history] / usr / src / sys / kern / uipc_socket.c
index f279edf..8733ca1 100644 (file)
@@ -1,4 +1,4 @@
-/*     uipc_socket.c   4.61    82/10/23        */
+/*     uipc_socket.c   4.66    82/12/14        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -34,23 +34,23 @@ socreate(dom, aso, type, proto, opt)
        register struct protosw *prp;
        register struct socket *so;
        struct mbuf *m;
        register struct protosw *prp;
        register struct socket *so;
        struct mbuf *m;
-       int pf, error;
+       int error;
 
 
-       pf = dom ? PF_UNIX : PF_INET;           /* should be u.u_protof */
        if (proto)
        if (proto)
-               prp = pffindproto(pf, proto);
+               prp = pffindproto(dom, proto);
        else
        else
-               prp = pffindtype(pf, type);
+               prp = pffindtype(dom, type);
        if (prp == 0)
                return (EPROTONOSUPPORT);
        if (prp->pr_type != type)
                return (EPROTOTYPE);
        if (prp == 0)
                return (EPROTONOSUPPORT);
        if (prp->pr_type != type)
                return (EPROTOTYPE);
-       m = m_getclr(M_WAIT);
+       m = m_getclr(M_WAIT, MT_SOCKET);
        if (m == 0)
                return (ENOBUFS);
        so = mtod(m, struct socket *);
        so->so_options = 0;
        so->so_state = 0;
        if (m == 0)
                return (ENOBUFS);
        so = mtod(m, struct socket *);
        so->so_options = 0;
        so->so_state = 0;
+       so->so_type = type;
        if (u.u_uid == 0)
                so->so_state = SS_PRIV;
        so->so_proto = prp;
        if (u.u_uid == 0)
                so->so_state = SS_PRIV;
        so->so_proto = prp;
@@ -180,12 +180,14 @@ discard:
 }
 
 /*ARGSUSED*/
 }
 
 /*ARGSUSED*/
-sostat(so, sb)
+sostat(so, ub)
        struct socket *so;
        struct socket *so;
-       struct stat *sb;
+       struct stat *ub;
 {
 {
+       struct stat sb;
 
 
-       bzero((caddr_t)sb, sizeof (*sb));               /* XXX */
+       bzero((caddr_t)&sb, sizeof (sb));               /* XXX */
+       (void) copyout((caddr_t)&sb, (caddr_t)ub, sizeof (sb));/* XXX */
        return (0);                                     /* XXX */
 }
 
        return (0);                                     /* XXX */
 }
 
@@ -328,7 +330,7 @@ again:
                                panic("sosend");
                        continue;
                }
                                panic("sosend");
                        continue;
                }
-               MGET(m, 1);
+               MGET(m, M_WAIT, MT_DATA);
                if (m == NULL) {
                        error = ENOBUFS;                        /* SIGPIPE? */
                        goto release;
                if (m == NULL) {
                        error = ENOBUFS;                        /* SIGPIPE? */
                        goto release;
@@ -373,7 +375,7 @@ soreceive(so, aname, uio, flags)
        int eor, s, error = 0, moff, tomark;
 
        if (flags & SOF_OOB) {
        int eor, s, error = 0, moff, tomark;
 
        if (flags & SOF_OOB) {
-               m = m_get(M_WAIT);
+               m = m_get(M_WAIT, MT_DATA);
                error = (*so->so_proto->pr_usrreq)(so, PRU_RCVOOB,
                    m, (struct mbuf *)0, (struct socketopt *)0);
                if (error)
                error = (*so->so_proto->pr_usrreq)(so, PRU_RCVOOB,
                    m, (struct mbuf *)0, (struct socketopt *)0);
                if (error)
@@ -605,31 +607,6 @@ soioctl(so, cmd, data)
                break;
        }
 
                break;
        }
 
-       case SIOCSENDOOB: {
-               char oob = *(char *)data;
-               struct mbuf *m = m_get(M_DONTWAIT);
-
-               if (m == 0)
-                       return (ENOBUFS);
-               m->m_len = 1;
-               *mtod(m, char *) = oob;
-               return ((*so->so_proto->pr_usrreq)(so, PRU_SENDOOB,
-                   m, (struct mbuf *)0, (struct socketopt *)0));
-       }
-
-       case SIOCRCVOOB: {
-               struct mbuf *m = m_get(M_WAIT);
-
-               if (m == 0)
-                       return (ENOBUFS);
-               *mtod(m, caddr_t) = 0;
-               (*so->so_proto->pr_usrreq)(so, PRU_RCVOOB,
-                   m, (struct mbuf *)0, (struct socketopt *)0);
-               *(char *)data = *mtod(m, char *);
-               (void) m_free(m);
-               break;
-       }
-
        case SIOCATMARK:
                *(int *)data = (so->so_state&SS_RCVATMARK) != 0;
                break;
        case SIOCATMARK:
                *(int *)data = (so->so_state&SS_RCVATMARK) != 0;
                break;