[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.211.2.4 and 1.243

version 1.211.2.4, 2014/08/20 00:04:29 version 1.243, 2015/05/02 23:46:04
Line 600  fsocreate(int domain, struct socket **so
Line 600  fsocreate(int domain, struct socket **so
         if (flags & SOCK_NONBLOCK) {          if (flags & SOCK_NONBLOCK) {
                 so->so_state |= SS_NBIO;                  so->so_state |= SS_NBIO;
         }          }
         fp->f_data = so;          fp->f_socket = so;
         fd_affix(curproc, fp, fd);          fd_affix(curproc, fp, fd);
   
         if (sop != NULL) {          if (sop != NULL) {
Line 624  sofamily(const struct socket *so)
Line 624  sofamily(const struct socket *so)
 }  }
   
 int  int
 sobind(struct socket *so, struct mbuf *nam, struct lwp *l)  sobind(struct socket *so, struct sockaddr *nam, struct lwp *l)
 {  {
         int     error;          int     error;
   
         solock(so);          solock(so);
           if (nam->sa_family != so->so_proto->pr_domain->dom_family) {
                   sounlock(so);
                   return EAFNOSUPPORT;
           }
         error = (*so->so_proto->pr_usrreqs->pr_bind)(so, nam, l);          error = (*so->so_proto->pr_usrreqs->pr_bind)(so, nam, l);
         sounlock(so);          sounlock(so);
         return error;          return error;
Line 789  soabort(struct socket *so)
Line 793  soabort(struct socket *so)
 }  }
   
 int  int
 soaccept(struct socket *so, struct mbuf *nam)  soaccept(struct socket *so, struct sockaddr *nam)
 {  {
         int error;          int error;
   
Line 807  soaccept(struct socket *so, struct mbuf 
Line 811  soaccept(struct socket *so, struct mbuf 
 }  }
   
 int  int
 soconnect(struct socket *so, struct mbuf *nam, struct lwp *l)  soconnect(struct socket *so, struct sockaddr *nam, struct lwp *l)
 {  {
         int error;          int error;
   
Line 823  soconnect(struct socket *so, struct mbuf
Line 827  soconnect(struct socket *so, struct mbuf
          */           */
         if (so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING) &&          if (so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING) &&
             ((so->so_proto->pr_flags & PR_CONNREQUIRED) ||              ((so->so_proto->pr_flags & PR_CONNREQUIRED) ||
             (error = sodisconnect(so))))              (error = sodisconnect(so)))) {
                 error = EISCONN;                  error = EISCONN;
         else          } else {
                   if (nam->sa_family != so->so_proto->pr_domain->dom_family) {
                           return EAFNOSUPPORT;
                   }
                 error = (*so->so_proto->pr_usrreqs->pr_connect)(so, nam, l);                  error = (*so->so_proto->pr_usrreqs->pr_connect)(so, nam, l);
           }
   
         return error;          return error;
 }  }
Line 933  sosend(struct socket *so, struct mbuf *a
Line 941  sosend(struct socket *so, struct mbuf *a
                                         error = ENOTCONN;                                          error = ENOTCONN;
                                         goto release;                                          goto release;
                                 }                                  }
                         } else if (addr == 0) {                          } else if (NULL == addr) {
                                 error = EDESTADDRREQ;                                  error = EDESTADDRREQ;
                                 goto release;                                  goto release;
                         }                          }
Line 1047  sosend(struct socket *so, struct mbuf *a
Line 1055  sosend(struct socket *so, struct mbuf *a
                                 so->so_options |= SO_DONTROUTE;                                  so->so_options |= SO_DONTROUTE;
                         if (resid > 0)                          if (resid > 0)
                                 so->so_state |= SS_MORETOCOME;                                  so->so_state |= SS_MORETOCOME;
                         if (flags & MSG_OOB)                          if (flags & MSG_OOB) {
                                 error = (*so->so_proto->pr_usrreqs->pr_sendoob)(so,                                  error = (*so->so_proto->pr_usrreqs->pr_sendoob)(so,
                                     top, control);                                      top, control);
                         else                          } else {
                                   struct sockaddr *sin = NULL;
                                   if (addr) {
                                           sin = mtod(addr, struct sockaddr *);
                                   }
                                 error = (*so->so_proto->pr_usrreqs->pr_send)(so,                                  error = (*so->so_proto->pr_usrreqs->pr_send)(so,
                                     top, addr, control, l);                                      top, sin, control, l);
                           }
                         if (dontroute)                          if (dontroute)
                                 so->so_options &= ~SO_DONTROUTE;                                  so->so_options &= ~SO_DONTROUTE;
                         if (resid > 0)                          if (resid > 0)
Line 2173  filt_sordetach(struct knote *kn)
Line 2186  filt_sordetach(struct knote *kn)
 {  {
         struct socket   *so;          struct socket   *so;
   
         so = ((file_t *)kn->kn_obj)->f_data;          so = ((file_t *)kn->kn_obj)->f_socket;
         solock(so);          solock(so);
         SLIST_REMOVE(&so->so_rcv.sb_sel.sel_klist, kn, knote, kn_selnext);          SLIST_REMOVE(&so->so_rcv.sb_sel.sel_klist, kn, knote, kn_selnext);
         if (SLIST_EMPTY(&so->so_rcv.sb_sel.sel_klist))          if (SLIST_EMPTY(&so->so_rcv.sb_sel.sel_klist))
Line 2188  filt_soread(struct knote *kn, long hint)
Line 2201  filt_soread(struct knote *kn, long hint)
         struct socket   *so;          struct socket   *so;
         int rv;          int rv;
   
         so = ((file_t *)kn->kn_obj)->f_data;          so = ((file_t *)kn->kn_obj)->f_socket;
         if (hint != NOTE_SUBMIT)          if (hint != NOTE_SUBMIT)
                 solock(so);                  solock(so);
         kn->kn_data = so->so_rcv.sb_cc;          kn->kn_data = so->so_rcv.sb_cc;
Line 2212  filt_sowdetach(struct knote *kn)
Line 2225  filt_sowdetach(struct knote *kn)
 {  {
         struct socket   *so;          struct socket   *so;
   
         so = ((file_t *)kn->kn_obj)->f_data;          so = ((file_t *)kn->kn_obj)->f_socket;
         solock(so);          solock(so);
         SLIST_REMOVE(&so->so_snd.sb_sel.sel_klist, kn, knote, kn_selnext);          SLIST_REMOVE(&so->so_snd.sb_sel.sel_klist, kn, knote, kn_selnext);
         if (SLIST_EMPTY(&so->so_snd.sb_sel.sel_klist))          if (SLIST_EMPTY(&so->so_snd.sb_sel.sel_klist))
Line 2227  filt_sowrite(struct knote *kn, long hint
Line 2240  filt_sowrite(struct knote *kn, long hint
         struct socket   *so;          struct socket   *so;
         int rv;          int rv;
   
         so = ((file_t *)kn->kn_obj)->f_data;          so = ((file_t *)kn->kn_obj)->f_socket;
         if (hint != NOTE_SUBMIT)          if (hint != NOTE_SUBMIT)
                 solock(so);                  solock(so);
         kn->kn_data = sbspace(&so->so_snd);          kn->kn_data = sbspace(&so->so_snd);
Line 2256  filt_solisten(struct knote *kn, long hin
Line 2269  filt_solisten(struct knote *kn, long hin
         struct socket   *so;          struct socket   *so;
         int rv;          int rv;
   
         so = ((file_t *)kn->kn_obj)->f_data;          so = ((file_t *)kn->kn_obj)->f_socket;
   
         /*          /*
          * Set kn_data to number of incoming connections, not           * Set kn_data to number of incoming connections, not
Line 2284  soo_kqfilter(struct file *fp, struct kno
Line 2297  soo_kqfilter(struct file *fp, struct kno
         struct socket   *so;          struct socket   *so;
         struct sockbuf  *sb;          struct sockbuf  *sb;
   
         so = ((file_t *)kn->kn_obj)->f_data;          so = ((file_t *)kn->kn_obj)->f_socket;
         solock(so);          solock(so);
         switch (kn->kn_filter) {          switch (kn->kn_filter) {
         case EVFILT_READ:          case EVFILT_READ:

Legend:
Removed from v.1.211.2.4  
changed lines
  Added in v.1.243

CVSweb <webmaster@jp.NetBSD.org>