[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.178 and 1.179

version 1.178, 2008/12/07 20:58:46 version 1.179, 2009/01/14 18:09:00
Line 65 
Line 65 
 #include <sys/cdefs.h>  #include <sys/cdefs.h>
 __KERNEL_RCSID(0, "$NetBSD$");  __KERNEL_RCSID(0, "$NetBSD$");
   
   #include "opt_compat_netbsd.h"
 #include "opt_sock_counters.h"  #include "opt_sock_counters.h"
 #include "opt_sosend_loan.h"  #include "opt_sosend_loan.h"
 #include "opt_mbuftrace.h"  #include "opt_mbuftrace.h"
Line 92  __KERNEL_RCSID(0, "$NetBSD$");
Line 93  __KERNEL_RCSID(0, "$NetBSD$");
 #include <sys/mutex.h>  #include <sys/mutex.h>
 #include <sys/condvar.h>  #include <sys/condvar.h>
   
   #ifdef COMPAT_50
   #include <compat/sys/time.h>
   #define SO_OSNDTIMEO    0x1005
   #define SO_ORCVTIMEO    0x1006
   #endif
   
 #include <uvm/uvm.h>  #include <uvm/uvm.h>
   
 MALLOC_DEFINE(M_SOOPTS, "soopts", "socket options");  MALLOC_DEFINE(M_SOOPTS, "soopts", "socket options");
Line 1576  sorflush(struct socket *so)
Line 1583  sorflush(struct socket *so)
 static int  static int
 sosetopt1(struct socket *so, const struct sockopt *sopt)  sosetopt1(struct socket *so, const struct sockopt *sopt)
 {  {
         int error, optval;          int error = 0, optval, opt;
         struct linger l;          struct linger l;
         struct timeval tv;          struct timeval tv;
   
         switch (sopt->sopt_name) {          switch ((opt = sopt->sopt_name)) {
   
         case SO_ACCEPTFILTER:          case SO_ACCEPTFILTER:
                 error = accept_filt_setopt(so, sopt);                  error = accept_filt_setopt(so, sopt);
Line 1618  sosetopt1(struct socket *so, const struc
Line 1625  sosetopt1(struct socket *so, const struc
                 if (error)                  if (error)
                         break;                          break;
                 if (optval)                  if (optval)
                         so->so_options |= sopt->sopt_name;                          so->so_options |= opt;
                 else                  else
                         so->so_options &= ~sopt->sopt_name;                          so->so_options &= ~opt;
                 break;                  break;
   
         case SO_SNDBUF:          case SO_SNDBUF:
Line 1641  sosetopt1(struct socket *so, const struc
Line 1648  sosetopt1(struct socket *so, const struc
                         break;                          break;
                 }                  }
   
                 switch (sopt->sopt_name) {                  switch (opt) {
                 case SO_SNDBUF:                  case SO_SNDBUF:
                         if (sbreserve(&so->so_snd, (u_long)optval, so) == 0) {                          if (sbreserve(&so->so_snd, (u_long)optval, so) == 0) {
                                 error = ENOBUFS;                                  error = ENOBUFS;
Line 1678  sosetopt1(struct socket *so, const struc
Line 1685  sosetopt1(struct socket *so, const struc
                 }                  }
                 break;                  break;
   
   #ifdef COMPAT_50
           case SO_OSNDTIMEO:
           case SO_ORCVTIMEO: {
                   struct timeval50 otv;
                   error = sockopt_get(sopt, &otv, sizeof(otv));
                   timeval50_to_timeval(&otv, &tv);
                   opt = opt == SO_OSNDTIMEO ? SO_SNDTIMEO : SO_RCVTIMEO;
                   error = 1;
                   /*FALLTHROUGH*/
           }
   #endif /* COMPAT_50 */
   
         case SO_SNDTIMEO:          case SO_SNDTIMEO:
         case SO_RCVTIMEO:          case SO_RCVTIMEO:
                 error = sockopt_get(sopt, &tv, sizeof(tv));                  if (error)
                           error = sockopt_get(sopt, &tv, sizeof(tv));
                 solock(so);                  solock(so);
                 if (error)                  if (error)
                         break;                          break;
Line 1694  sosetopt1(struct socket *so, const struc
Line 1714  sosetopt1(struct socket *so, const struc
                 if (optval == 0 && tv.tv_usec != 0)                  if (optval == 0 && tv.tv_usec != 0)
                         optval = 1;                          optval = 1;
   
                 switch (sopt->sopt_name) {                  switch (opt) {
                 case SO_SNDTIMEO:                  case SO_SNDTIMEO:
                         so->so_snd.sb_timeo = optval;                          so->so_snd.sb_timeo = optval;
                         break;                          break;
Line 1767  so_setsockopt(struct lwp *l, struct sock
Line 1787  so_setsockopt(struct lwp *l, struct sock
 static int  static int
 sogetopt1(struct socket *so, struct sockopt *sopt)  sogetopt1(struct socket *so, struct sockopt *sopt)
 {  {
         int error, optval;          int error, optval, opt;
         struct linger l;          struct linger l;
         struct timeval tv;          struct timeval tv;
   
         switch (sopt->sopt_name) {          switch ((opt = sopt->sopt_name)) {
   
         case SO_ACCEPTFILTER:          case SO_ACCEPTFILTER:
                 error = accept_filt_getopt(so, sopt);                  error = accept_filt_getopt(so, sopt);
Line 1793  sogetopt1(struct socket *so, struct sock
Line 1813  sogetopt1(struct socket *so, struct sock
         case SO_BROADCAST:          case SO_BROADCAST:
         case SO_OOBINLINE:          case SO_OOBINLINE:
         case SO_TIMESTAMP:          case SO_TIMESTAMP:
                 error = sockopt_setint(sopt,                  error = sockopt_setint(sopt, (so->so_options & opt) ? 1 : 0);
                     (so->so_options & sopt->sopt_name) ? 1 : 0);  
                 break;                  break;
   
         case SO_TYPE:          case SO_TYPE:
Line 1822  sogetopt1(struct socket *so, struct sock
Line 1841  sogetopt1(struct socket *so, struct sock
                 error = sockopt_setint(sopt, so->so_rcv.sb_lowat);                  error = sockopt_setint(sopt, so->so_rcv.sb_lowat);
                 break;                  break;
   
   #ifdef COMPAT_50
           case SO_OSNDTIMEO:
           case SO_ORCVTIMEO: {
                   struct timeval50 otv;
   
                   optval = (opt == SO_OSNDTIMEO ?
                        so->so_snd.sb_timeo : so->so_rcv.sb_timeo);
   
                   otv.tv_sec = optval / hz;
                   otv.tv_usec = (optval % hz) * tick;
   
                   error = sockopt_set(sopt, &otv, sizeof(otv));
                   break;
           }
   #endif /* COMPAT_50 */
   
         case SO_SNDTIMEO:          case SO_SNDTIMEO:
         case SO_RCVTIMEO:          case SO_RCVTIMEO:
                 optval = (sopt->sopt_name == SO_SNDTIMEO ?                  optval = (opt == SO_SNDTIMEO ?
                      so->so_snd.sb_timeo : so->so_rcv.sb_timeo);                       so->so_snd.sb_timeo : so->so_rcv.sb_timeo);
   
                 tv.tv_sec = optval / hz;                  tv.tv_sec = optval / hz;

Legend:
Removed from v.1.178  
changed lines
  Added in v.1.179

CVSweb <webmaster@jp.NetBSD.org>