version 1.180, 2009/01/14 20:33:19 |
version 1.185, 2009/01/21 06:59:29 |
Line 95 __KERNEL_RCSID(0, "$NetBSD$"); |
|
Line 95 __KERNEL_RCSID(0, "$NetBSD$"); |
|
|
|
#ifdef COMPAT_50 |
#ifdef COMPAT_50 |
#include <compat/sys/time.h> |
#include <compat/sys/time.h> |
#define SO_OSNDTIMEO 0x1005 |
#include <compat/sys/socket.h> |
#define SO_ORCVTIMEO 0x1006 |
|
#endif |
#endif |
|
|
#include <uvm/uvm.h> |
#include <uvm/uvm.h> |
Line 681 soclose(struct socket *so) |
|
Line 680 soclose(struct socket *so) |
|
if ((so->so_state & SS_ISDISCONNECTING) && so->so_nbio) |
if ((so->so_state & SS_ISDISCONNECTING) && so->so_nbio) |
goto drop; |
goto drop; |
while (so->so_state & SS_ISCONNECTED) { |
while (so->so_state & SS_ISCONNECTED) { |
error = sowait(so, so->so_linger * hz); |
error = sowait(so, true, so->so_linger * hz); |
if (error) |
if (error) |
break; |
break; |
} |
} |
Line 1583 sorflush(struct socket *so) |
|
Line 1582 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 = 0, optval, opt; |
int error = EINVAL, optval, opt; |
struct linger l; |
struct linger l; |
struct timeval tv; |
struct timeval tv; |
|
|
memset(&tv, 0, sizeof(struct timeval)); |
|
|
|
switch ((opt = sopt->sopt_name)) { |
switch ((opt = sopt->sopt_name)) { |
|
|
case SO_ACCEPTFILTER: |
case SO_ACCEPTFILTER: |
Line 1622 sosetopt1(struct socket *so, const struc |
|
Line 1619 sosetopt1(struct socket *so, const struc |
|
case SO_REUSEPORT: |
case SO_REUSEPORT: |
case SO_OOBINLINE: |
case SO_OOBINLINE: |
case SO_TIMESTAMP: |
case SO_TIMESTAMP: |
|
#ifdef SO_OTIMESTAMP |
|
case SO_OTIMESTAMP: |
|
#endif |
error = sockopt_getint(sopt, &optval); |
error = sockopt_getint(sopt, &optval); |
solock(so); |
solock(so); |
if (error) |
if (error) |
Line 1692 sosetopt1(struct socket *so, const struc |
|
Line 1692 sosetopt1(struct socket *so, const struc |
|
case SO_ORCVTIMEO: { |
case SO_ORCVTIMEO: { |
struct timeval50 otv; |
struct timeval50 otv; |
error = sockopt_get(sopt, &otv, sizeof(otv)); |
error = sockopt_get(sopt, &otv, sizeof(otv)); |
|
if (error) |
|
break; |
timeval50_to_timeval(&otv, &tv); |
timeval50_to_timeval(&otv, &tv); |
opt = opt == SO_OSNDTIMEO ? SO_SNDTIMEO : SO_RCVTIMEO; |
opt = opt == SO_OSNDTIMEO ? SO_SNDTIMEO : SO_RCVTIMEO; |
error = 1; |
error = 0; |
/*FALLTHROUGH*/ |
/*FALLTHROUGH*/ |
} |
} |
#endif /* COMPAT_50 */ |
#endif /* COMPAT_50 */ |
Line 1815 sogetopt1(struct socket *so, struct sock |
|
Line 1817 sogetopt1(struct socket *so, struct sock |
|
case SO_BROADCAST: |
case SO_BROADCAST: |
case SO_OOBINLINE: |
case SO_OOBINLINE: |
case SO_TIMESTAMP: |
case SO_TIMESTAMP: |
|
#ifdef SO_OTIMESTAMP |
|
case SO_OTIMESTAMP: |
|
#endif |
error = sockopt_setint(sopt, (so->so_options & opt) ? 1 : 0); |
error = sockopt_setint(sopt, (so->so_options & opt) ? 1 : 0); |
break; |
break; |
|
|