[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.235.2.3 and 1.235.2.4

version 1.235.2.3, 2015/09/22 12:06:07 version 1.235.2.4, 2015/12/27 12:10:05
Line 80  __KERNEL_RCSID(0, "$NetBSD$");
Line 80  __KERNEL_RCSID(0, "$NetBSD$");
 #include "opt_mbuftrace.h"  #include "opt_mbuftrace.h"
 #include "opt_somaxkva.h"  #include "opt_somaxkva.h"
 #include "opt_multiprocessor.h" /* XXX */  #include "opt_multiprocessor.h" /* XXX */
   #include "opt_sctp.h"
 #endif  #endif
   
 #include <sys/param.h>  #include <sys/param.h>
Line 644  int
Line 645  int
 solisten(struct socket *so, int backlog, struct lwp *l)  solisten(struct socket *so, int backlog, struct lwp *l)
 {  {
         int     error;          int     error;
           short   oldopt, oldqlimit;
   
         solock(so);          solock(so);
         if ((so->so_state & (SS_ISCONNECTED | SS_ISCONNECTING |          if ((so->so_state & (SS_ISCONNECTED | SS_ISCONNECTING |
Line 651  solisten(struct socket *so, int backlog,
Line 653  solisten(struct socket *so, int backlog,
                 sounlock(so);                  sounlock(so);
                 return EINVAL;                  return EINVAL;
         }          }
         error = (*so->so_proto->pr_usrreqs->pr_listen)(so, l);          oldopt = so->so_options;
         if (error != 0) {          oldqlimit = so->so_qlimit;
                 sounlock(so);  
                 return error;  
         }  
         if (TAILQ_EMPTY(&so->so_q))          if (TAILQ_EMPTY(&so->so_q))
                 so->so_options |= SO_ACCEPTCONN;                  so->so_options |= SO_ACCEPTCONN;
         if (backlog < 0)          if (backlog < 0)
                 backlog = 0;                  backlog = 0;
         so->so_qlimit = min(backlog, somaxconn);          so->so_qlimit = min(backlog, somaxconn);
   
           error = (*so->so_proto->pr_usrreqs->pr_listen)(so, l);
           if (error != 0) {
                   so->so_options = oldopt;
                   so->so_qlimit = oldqlimit;
                   sounlock(so);
                   return error;
           }
         sounlock(so);          sounlock(so);
         return 0;          return 0;
 }  }
Line 1323  soreceive(struct socket *so, struct mbuf
Line 1330  soreceive(struct socket *so, struct mbuf
                         sbsync(&so->so_rcv, nextrecord);                          sbsync(&so->so_rcv, nextrecord);
                 }                  }
         }          }
           if (pr->pr_flags & PR_ADDR_OPT) {
                   /*
                    * For SCTP we may be getting a
                    * whole message OR a partial delivery.
                    */
                   if (m->m_type == MT_SONAME) {
                           orig_resid = 0;
                           if (flags & MSG_PEEK) {
                                   if (paddr)
                                           *paddr = m_copy(m, 0, m->m_len);
                                   m = m->m_next;
                           } else {
                                   sbfree(&so->so_rcv, m);
                                   if (paddr) {
                                           *paddr = m;
                                           so->so_rcv.sb_mb = m->m_next;
                                           m->m_next = 0;
                                           m = so->so_rcv.sb_mb;
                                   } else {
                                           MFREE(m, so->so_rcv.sb_mb);
                                           m = so->so_rcv.sb_mb;
                                   }
                           }
                   }
           }
   
         /*          /*
          * Process one or more MT_CONTROL mbufs present before any data mbufs           * Process one or more MT_CONTROL mbufs present before any data mbufs
Line 1457  soreceive(struct socket *so, struct mbuf
Line 1489  soreceive(struct socket *so, struct mbuf
                 if (len == m->m_len - moff) {                  if (len == m->m_len - moff) {
                         if (m->m_flags & M_EOR)                          if (m->m_flags & M_EOR)
                                 flags |= MSG_EOR;                                  flags |= MSG_EOR;
   #ifdef SCTP
                           if (m->m_flags & M_NOTIFICATION)
                                   flags |= MSG_NOTIFICATION;
   #endif /* SCTP */
                         if (flags & MSG_PEEK) {                          if (flags & MSG_PEEK) {
                                 m = m->m_next;                                  m = m->m_next;
                                 moff = 0;                                  moff = 0;

Legend:
Removed from v.1.235.2.3  
changed lines
  Added in v.1.235.2.4

CVSweb <webmaster@jp.NetBSD.org>