[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.16 and 1.20

version 1.16, 1994/06/29 06:33:37 version 1.20, 1995/08/12 23:59:11
Line 83  socreate(dom, aso, type, proto)
Line 83  socreate(dom, aso, type, proto)
                 so->so_state = SS_PRIV;                  so->so_state = SS_PRIV;
         so->so_proto = prp;          so->so_proto = prp;
         error =          error =
             (*prp->pr_usrreq)(so, PRU_ATTACH,              (*prp->pr_usrreq)(so, PRU_ATTACH, (struct mbuf *)0,
                 (struct mbuf *)0, (struct mbuf *)proto, (struct mbuf *)0);                  (struct mbuf *)(long)proto, (struct mbuf *)0);
         if (error) {          if (error) {
                 so->so_state |= SS_NOFDREF;                  so->so_state |= SS_NOFDREF;
                 sofree(so);                  sofree(so);
                 return (error);                  return (error);
         }          }
 #ifdef COMPAT_SUNOS  #ifdef COMPAT_SUNOS
         if (p->p_emul == EMUL_SUNOS && type == SOCK_DGRAM)          {
                 so->so_options |= SO_BROADCAST;                  extern struct emul emul_sunos;
                   if (p->p_emul == &emul_sunos && type == SOCK_DGRAM)
                           so->so_options |= SO_BROADCAST;
           }
 #endif  #endif
         *aso = so;          *aso = so;
         return (0);          return (0);
Line 103  sobind(so, nam)
Line 106  sobind(so, nam)
         struct socket *so;          struct socket *so;
         struct mbuf *nam;          struct mbuf *nam;
 {  {
         int s = splnet();          int s = splsoftnet();
         int error;          int error;
   
         error =          error =
Line 118  solisten(so, backlog)
Line 121  solisten(so, backlog)
         register struct socket *so;          register struct socket *so;
         int backlog;          int backlog;
 {  {
         int s = splnet(), error;          int s = splsoftnet(), error;
   
         error =          error =
             (*so->so_proto->pr_usrreq)(so, PRU_LISTEN,              (*so->so_proto->pr_usrreq)(so, PRU_LISTEN,
Line 162  int
Line 165  int
 soclose(so)  soclose(so)
         register struct socket *so;          register struct socket *so;
 {  {
         int s = splnet();               /* conservative */          int s = splsoftnet();           /* conservative */
         int error = 0;          int error = 0;
   
         if (so->so_options & SO_ACCEPTCONN) {          if (so->so_options & SO_ACCEPTCONN) {
Line 207  discard:
Line 210  discard:
 }  }
   
 /*  /*
  * Must be called at splnet...   * Must be called at splsoftnet...
  */   */
 int  int
 soabort(so)  soabort(so)
Line 224  soaccept(so, nam)
Line 227  soaccept(so, nam)
         register struct socket *so;          register struct socket *so;
         struct mbuf *nam;          struct mbuf *nam;
 {  {
         int s = splnet();          int s = splsoftnet();
         int error;          int error;
   
         if ((so->so_state & SS_NOFDREF) == 0)          if ((so->so_state & SS_NOFDREF) == 0)
Line 246  soconnect(so, nam)
Line 249  soconnect(so, nam)
   
         if (so->so_options & SO_ACCEPTCONN)          if (so->so_options & SO_ACCEPTCONN)
                 return (EOPNOTSUPP);                  return (EOPNOTSUPP);
         s = splnet();          s = splsoftnet();
         /*          /*
          * If protocol is connection-based, can only connect once.           * If protocol is connection-based, can only connect once.
          * Otherwise, if connected, try to disconnect first.           * Otherwise, if connected, try to disconnect first.
Line 269  soconnect2(so1, so2)
Line 272  soconnect2(so1, so2)
         register struct socket *so1;          register struct socket *so1;
         struct socket *so2;          struct socket *so2;
 {  {
         int s = splnet();          int s = splsoftnet();
         int error;          int error;
   
         error = (*so1->so_proto->pr_usrreq)(so1, PRU_CONNECT2,          error = (*so1->so_proto->pr_usrreq)(so1, PRU_CONNECT2,
Line 282  int
Line 285  int
 sodisconnect(so)  sodisconnect(so)
         register struct socket *so;          register struct socket *so;
 {  {
         int s = splnet();          int s = splsoftnet();
         int error;          int error;
   
         if ((so->so_state & SS_ISCONNECTED) == 0) {          if ((so->so_state & SS_ISCONNECTED) == 0) {
Line 359  restart:
Line 362  restart:
         if (error = sblock(&so->so_snd, SBLOCKWAIT(flags)))          if (error = sblock(&so->so_snd, SBLOCKWAIT(flags)))
                 goto out;                  goto out;
         do {          do {
                 s = splnet();                  s = splsoftnet();
                 if (so->so_state & SS_CANTSENDMORE)                  if (so->so_state & SS_CANTSENDMORE)
                         snderr(EPIPE);                          snderr(EPIPE);
                 if (so->so_error)                  if (so->so_error)
Line 452  nopages:
Line 455  nopages:
                     } while (space > 0 && atomic);                      } while (space > 0 && atomic);
                     if (dontroute)                      if (dontroute)
                             so->so_options |= SO_DONTROUTE;                              so->so_options |= SO_DONTROUTE;
                     s = splnet();                               /* XXX */                      s = splsoftnet();                           /* XXX */
                     error = (*so->so_proto->pr_usrreq)(so,                      error = (*so->so_proto->pr_usrreq)(so,
                         (flags & MSG_OOB) ? PRU_SENDOOB : PRU_SEND,                          (flags & MSG_OOB) ? PRU_SENDOOB : PRU_SEND,
                         top, addr, control);                          top, addr, control);
Line 521  soreceive(so, paddr, uio, mp0, controlp,
Line 524  soreceive(so, paddr, uio, mp0, controlp,
                 flags = 0;                  flags = 0;
         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,                  error = (*pr->pr_usrreq)(so, PRU_RCVOOB, m,
                     m, (struct mbuf *)(flags & MSG_PEEK), (struct mbuf *)0);                      (struct mbuf *)(long)(flags & MSG_PEEK), (struct mbuf *)0);
                 if (error)                  if (error)
                         goto bad;                          goto bad;
                 do {                  do {
Line 544  bad:
Line 547  bad:
 restart:  restart:
         if (error = sblock(&so->so_rcv, SBLOCKWAIT(flags)))          if (error = sblock(&so->so_rcv, SBLOCKWAIT(flags)))
                 return (error);                  return (error);
         s = splnet();          s = splsoftnet();
   
         m = so->so_rcv.sb_mb;          m = so->so_rcv.sb_mb;
         /*          /*
Line 695  dontblock:
Line 698  dontblock:
                 if (mp == 0) {                  if (mp == 0) {
                         splx(s);                          splx(s);
                         error = uiomove(mtod(m, caddr_t) + moff, (int)len, uio);                          error = uiomove(mtod(m, caddr_t) + moff, (int)len, uio);
                         s = splnet();                          s = splsoftnet();
                 } else                  } else
                         uio->uio_resid -= len;                          uio->uio_resid -= len;
                 if (len == m->m_len - moff) {                  if (len == m->m_len - moff) {
Line 777  dontblock:
Line 780  dontblock:
                         so->so_rcv.sb_mb = nextrecord;                          so->so_rcv.sb_mb = nextrecord;
                 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 *)flags, (struct mbuf *)0,                              (struct mbuf *)(long)flags, (struct mbuf *)0,
                             (struct mbuf *)0);                              (struct mbuf *)0);
         }          }
         if (orig_resid == uio->uio_resid && orig_resid &&          if (orig_resid == uio->uio_resid && orig_resid &&
Line 916  sosetopt(so, level, optname, m0)
Line 919  sosetopt(so, level, optname, m0)
                                 goto bad;                                  goto bad;
                         }                          }
                         tv = mtod(m, struct timeval *);                          tv = mtod(m, struct timeval *);
                         if (tv->tv_sec > SHRT_MAX / hz - hz) {                          if (tv->tv_sec * hz + tv->tv_usec / tick > SHRT_MAX) {
                                 error = EDOM;                                  error = EDOM;
                                 goto bad;                                  goto bad;
                         }                          }

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.20

CVSweb <webmaster@jp.NetBSD.org>