[BACK]Return to uipc_socket.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / kern

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/kern/uipc_socket.c between version 1.101 and 1.102

version 1.101, 2004/05/01 02:24:38 version 1.102, 2004/05/22 22:52:13
Line 407  sosend_loan(struct socket *so, struct ui
Line 407  sosend_loan(struct socket *so, struct ui
   
         /* XXX KDASSERT */          /* XXX KDASSERT */
         KASSERT(npgs <= M_EXT_MAXPAGES);          KASSERT(npgs <= M_EXT_MAXPAGES);
           KASSERT(uio->uio_procp != NULL);
   
         lva = sokvaalloc(len, so);          lva = sokvaalloc(len, so);
         if (lva == 0)          if (lva == 0)
Line 450  sosend_loan(struct socket *so, struct ui
Line 451  sosend_loan(struct socket *so, struct ui
  */   */
 /*ARGSUSED*/  /*ARGSUSED*/
 int  int
 socreate(int dom, struct socket **aso, int type, int proto)  socreate(int dom, struct socket **aso, int type, int proto, struct proc *p)
 {  {
         struct proc     *p;  
         const struct protosw    *prp;          const struct protosw    *prp;
         struct socket   *so;          struct socket   *so;
         int             error, s;          int             error, s;
   
         p = curproc;            /* XXX */  
         if (proto)          if (proto)
                 prp = pffindproto(dom, proto, type);                  prp = pffindproto(dom, proto, type);
         else          else
Line 650  soaccept(struct socket *so, struct mbuf 
Line 649  soaccept(struct socket *so, struct mbuf 
 }  }
   
 int  int
 soconnect(struct socket *so, struct mbuf *nam)  soconnect(struct socket *so, struct mbuf *nam, struct proc *p)
 {  {
         struct proc     *p;  
         int             s, error;          int             s, error;
   
         p = curproc;            /* XXX */  
         if (so->so_options & SO_ACCEPTCONN)          if (so->so_options & SO_ACCEPTCONN)
                 return (EOPNOTSUPP);                  return (EOPNOTSUPP);
         s = splsoftnet();          s = splsoftnet();
Line 732  sodisconnect(struct socket *so)
Line 729  sodisconnect(struct socket *so)
  */   */
 int  int
 sosend(struct socket *so, struct mbuf *addr, struct uio *uio, struct mbuf *top,  sosend(struct socket *so, struct mbuf *addr, struct uio *uio, struct mbuf *top,
         struct mbuf *control, int flags)          struct mbuf *control, int flags, struct proc *p)
 {  {
         struct proc     *p;  
         struct mbuf     **mp, *m;          struct mbuf     **mp, *m;
         long            space, len, resid, clen, mlen;          long            space, len, resid, clen, mlen;
         int             error, s, dontroute, atomic;          int             error, s, dontroute, atomic;
   
         sodopendfree(so);          sodopendfree(so);
   
         p = curproc;            /* XXX */  
         clen = 0;          clen = 0;
         atomic = sosendallatonce(so) || top;          atomic = sosendallatonce(so) || top;
         if (uio)          if (uio)
Line 762  sosend(struct socket *so, struct mbuf *a
Line 757  sosend(struct socket *so, struct mbuf *a
         dontroute =          dontroute =
             (flags & MSG_DONTROUTE) && (so->so_options & SO_DONTROUTE) == 0 &&              (flags & MSG_DONTROUTE) && (so->so_options & SO_DONTROUTE) == 0 &&
             (so->so_proto->pr_flags & PR_ATOMIC);              (so->so_proto->pr_flags & PR_ATOMIC);
         p->p_stats->p_ru.ru_msgsnd++;          if (p)
                   p->p_stats->p_ru.ru_msgsnd++;
         if (control)          if (control)
                 clen = control->m_len;                  clen = control->m_len;
 #define snderr(errno)   { error = errno; splx(s); goto release; }  #define snderr(errno)   { error = errno; splx(s); goto release; }
Line 935  int
Line 931  int
 soreceive(struct socket *so, struct mbuf **paddr, struct uio *uio,  soreceive(struct socket *so, struct mbuf **paddr, struct uio *uio,
         struct mbuf **mp0, struct mbuf **controlp, int *flagsp)          struct mbuf **mp0, struct mbuf **controlp, int *flagsp)
 {  {
           struct proc * p;
         struct mbuf     *m, **mp;          struct mbuf     *m, **mp;
         int             flags, len, error, s, offset, moff, type, orig_resid;          int             flags, len, error, s, offset, moff, type, orig_resid;
         const struct protosw    *pr;          const struct protosw    *pr;
Line 945  soreceive(struct socket *so, struct mbuf
Line 942  soreceive(struct socket *so, struct mbuf
         mp = mp0;          mp = mp0;
         type = 0;          type = 0;
         orig_resid = uio->uio_resid;          orig_resid = uio->uio_resid;
           p = uio->uio_procp;
   
         if (paddr)          if (paddr)
                 *paddr = 0;                  *paddr = 0;
         if (controlp)          if (controlp)
Line 960  soreceive(struct socket *so, struct mbuf
Line 959  soreceive(struct socket *so, struct mbuf
         if (flags & MSG_OOB) {          if (flags & MSG_OOB) {
                 m = m_get(M_WAIT, MT_DATA);                  m = m_get(M_WAIT, MT_DATA);
                 error = (*pr->pr_usrreq)(so, PRU_RCVOOB, m,                  error = (*pr->pr_usrreq)(so, PRU_RCVOOB, m,
                     (struct mbuf *)(long)(flags & MSG_PEEK), (struct mbuf *)0,                      (struct mbuf *)(long)(flags & MSG_PEEK),
                     (struct proc *)0);                      (struct mbuf *)0, p);
                 if (error)                  if (error)
                         goto bad;                          goto bad;
                 do {                  do {
Line 978  soreceive(struct socket *so, struct mbuf
Line 977  soreceive(struct socket *so, struct mbuf
                 *mp = (struct mbuf *)0;                  *mp = (struct mbuf *)0;
         if (so->so_state & SS_ISCONFIRMING && uio->uio_resid)          if (so->so_state & SS_ISCONFIRMING && uio->uio_resid)
                 (*pr->pr_usrreq)(so, PRU_RCVD, (struct mbuf *)0,                  (*pr->pr_usrreq)(so, PRU_RCVD, (struct mbuf *)0,
                     (struct mbuf *)0, (struct mbuf *)0, (struct proc *)0);                      (struct mbuf *)0, (struct mbuf *)0, p);
   
  restart:   restart:
         if ((error = sblock(&so->so_rcv, SBLOCKWAIT(flags))) != 0)          if ((error = sblock(&so->so_rcv, SBLOCKWAIT(flags))) != 0)
Line 1052  soreceive(struct socket *so, struct mbuf
Line 1051  soreceive(struct socket *so, struct mbuf
          * info, we save a copy of m->m_nextpkt into nextrecord.           * info, we save a copy of m->m_nextpkt into nextrecord.
          */           */
 #ifdef notyet /* XXXX */  #ifdef notyet /* XXXX */
         if (uio->uio_procp)          if (p)
                 uio->uio_procp->p_stats->p_ru.ru_msgrcv++;                  p->p_stats->p_ru.ru_msgrcv++;
 #endif  #endif
         KASSERT(m == so->so_rcv.sb_mb);          KASSERT(m == so->so_rcv.sb_mb);
         SBLASTRECORDCHK(&so->so_rcv, "soreceive 1");          SBLASTRECORDCHK(&so->so_rcv, "soreceive 1");
Line 1092  soreceive(struct socket *so, struct mbuf
Line 1091  soreceive(struct socket *so, struct mbuf
                         sbfree(&so->so_rcv, m);                          sbfree(&so->so_rcv, m);
                         mbuf_removed = 1;                          mbuf_removed = 1;
                         if (controlp) {                          if (controlp) {
                                 if (pr->pr_domain->dom_externalize &&                                  struct domain *dom = pr->pr_domain;
                                   if (dom->dom_externalize && p &&
                                     mtod(m, struct cmsghdr *)->cmsg_type ==                                      mtod(m, struct cmsghdr *)->cmsg_type ==
                                     SCM_RIGHTS)                                      SCM_RIGHTS)
                                         error = (*pr->pr_domain->dom_externalize)(m);                                          error = (*dom->dom_externalize)(m, p);
                                 *controlp = m;                                  *controlp = m;
                                 so->so_rcv.sb_mb = m->m_next;                                  so->so_rcv.sb_mb = m->m_next;
                                 m->m_next = 0;                                  m->m_next = 0;
Line 1281  soreceive(struct socket *so, struct mbuf
Line 1281  soreceive(struct socket *so, struct mbuf
                                 (*pr->pr_usrreq)(so, PRU_RCVD,                                  (*pr->pr_usrreq)(so, PRU_RCVD,
                                     (struct mbuf *)0,                                      (struct mbuf *)0,
                                     (struct mbuf *)(long)flags,                                      (struct mbuf *)(long)flags,
                                     (struct mbuf *)0,                                      (struct mbuf *)0, p);
                                     (struct proc *)0);  
                         SBLASTRECORDCHK(&so->so_rcv, "soreceive sbwait 2");                          SBLASTRECORDCHK(&so->so_rcv, "soreceive sbwait 2");
                         SBLASTMBUFCHK(&so->so_rcv, "soreceive sbwait 2");                          SBLASTMBUFCHK(&so->so_rcv, "soreceive sbwait 2");
                         error = sbwait(&so->so_rcv);                          error = sbwait(&so->so_rcv);
Line 1319  soreceive(struct socket *so, struct mbuf
Line 1318  soreceive(struct socket *so, struct mbuf
                 SBLASTMBUFCHK(&so->so_rcv, "soreceive 4");                  SBLASTMBUFCHK(&so->so_rcv, "soreceive 4");
                 if (pr->pr_flags & PR_WANTRCVD && so->so_pcb)                  if (pr->pr_flags & PR_WANTRCVD && so->so_pcb)
                         (*pr->pr_usrreq)(so, PRU_RCVD, (struct mbuf *)0,                          (*pr->pr_usrreq)(so, PRU_RCVD, (struct mbuf *)0,
                             (struct mbuf *)(long)flags, (struct mbuf *)0,                              (struct mbuf *)(long)flags, (struct mbuf *)0, p);
                             (struct proc *)0);  
         }          }
         if (orig_resid == uio->uio_resid && orig_resid &&          if (orig_resid == uio->uio_resid && orig_resid &&
             (flags & MSG_EOR) == 0 && (so->so_state & SS_CANTRCVMORE) == 0) {              (flags & MSG_EOR) == 0 && (so->so_state & SS_CANTRCVMORE) == 0) {

Legend:
Removed from v.1.101  
changed lines
  Added in v.1.102

CVSweb <webmaster@jp.NetBSD.org>