version 1.255.2.2, 2018/04/09 13:34:10 |
version 1.256, 2017/07/06 17:42:39 |
Line 1244 soreceive(struct socket *so, struct mbuf |
|
Line 1244 soreceive(struct socket *so, struct mbuf |
|
if (m != NULL) |
if (m != NULL) |
goto dontblock; |
goto dontblock; |
error = so->so_error; |
error = so->so_error; |
so->so_error = 0; |
if ((flags & MSG_PEEK) == 0) |
|
so->so_error = 0; |
goto release; |
goto release; |
} |
} |
if (so->so_state & SS_CANTRCVMORE) { |
if (so->so_state & SS_CANTRCVMORE) { |
Line 2108 sockopt_set(struct sockopt *sopt, const |
|
Line 2109 sockopt_set(struct sockopt *sopt, const |
|
return error; |
return error; |
} |
} |
|
|
if (sopt->sopt_size < len) |
KASSERT(sopt->sopt_size == len); |
return EINVAL; |
|
|
|
memcpy(sopt->sopt_data, buf, len); |
memcpy(sopt->sopt_data, buf, len); |
sopt->sopt_retsize = len; |
|
|
|
return 0; |
return 0; |
} |
} |
|
|
Line 2172 sockopt_setmbuf(struct sockopt *sopt, st |
|
Line 2169 sockopt_setmbuf(struct sockopt *sopt, st |
|
return error; |
return error; |
} |
} |
|
|
if (sopt->sopt_size < len) |
KASSERT(sopt->sopt_size == len); |
return EINVAL; |
|
|
|
m_copydata(m, 0, len, sopt->sopt_data); |
m_copydata(m, 0, len, sopt->sopt_data); |
m_freem(m); |
m_freem(m); |
sopt->sopt_retsize = len; |
|
|
|
return 0; |
return 0; |
} |
} |
Line 2250 filt_soread(struct knote *kn, long hint) |
|
Line 2244 filt_soread(struct knote *kn, long hint) |
|
kn->kn_flags |= EV_EOF; |
kn->kn_flags |= EV_EOF; |
kn->kn_fflags = so->so_error; |
kn->kn_fflags = so->so_error; |
rv = 1; |
rv = 1; |
} else if (so->so_error) |
} else if (so->so_error) /* temporary udp error */ |
rv = 1; |
rv = 1; |
else if (kn->kn_sfflags & NOTE_LOWAT) |
else if (kn->kn_sfflags & NOTE_LOWAT) |
rv = (kn->kn_data >= kn->kn_sdata); |
rv = (kn->kn_data >= kn->kn_sdata); |
Line 2289 filt_sowrite(struct knote *kn, long hint |
|
Line 2283 filt_sowrite(struct knote *kn, long hint |
|
kn->kn_flags |= EV_EOF; |
kn->kn_flags |= EV_EOF; |
kn->kn_fflags = so->so_error; |
kn->kn_fflags = so->so_error; |
rv = 1; |
rv = 1; |
} else if (so->so_error) |
} else if (so->so_error) /* temporary udp error */ |
rv = 1; |
rv = 1; |
else if (((so->so_state & SS_ISCONNECTED) == 0) && |
else if (((so->so_state & SS_ISCONNECTED) == 0) && |
(so->so_proto->pr_flags & PR_CONNREQUIRED)) |
(so->so_proto->pr_flags & PR_CONNREQUIRED)) |
Line 2416 sopoll(struct socket *so, int events) |
|
Line 2410 sopoll(struct socket *so, int events) |
|
return revents; |
return revents; |
} |
} |
|
|
|
struct mbuf ** |
|
sbsavetimestamp(int opt, struct mbuf *m, struct mbuf **mp) |
|
{ |
|
struct timeval tv; |
|
microtime(&tv); |
|
|
|
#ifdef SO_OTIMESTAMP |
|
if (opt & SO_OTIMESTAMP) { |
|
struct timeval50 tv50; |
|
|
|
timeval_to_timeval50(&tv, &tv50); |
|
*mp = sbcreatecontrol(&tv50, sizeof(tv50), |
|
SCM_OTIMESTAMP, SOL_SOCKET); |
|
if (*mp) |
|
mp = &(*mp)->m_next; |
|
} else |
|
#endif |
|
|
|
if (opt & SO_TIMESTAMP) { |
|
*mp = sbcreatecontrol(&tv, sizeof(tv), |
|
SCM_TIMESTAMP, SOL_SOCKET); |
|
if (*mp) |
|
mp = &(*mp)->m_next; |
|
} |
|
return mp; |
|
} |
|
|
|
|
#include <sys/sysctl.h> |
#include <sys/sysctl.h> |
|
|