version 1.255, 2017/05/27 21:02:56 |
version 1.255.2.3, 2018/06/09 15:16:30 |
Line 1240 soreceive(struct socket *so, struct mbuf |
|
Line 1240 soreceive(struct socket *so, struct mbuf |
|
if (m == NULL && so->so_rcv.sb_cc) |
if (m == NULL && so->so_rcv.sb_cc) |
panic("receive 1"); |
panic("receive 1"); |
#endif |
#endif |
if (so->so_error) { |
if (so->so_error || so->so_rerror) { |
if (m != NULL) |
if (m != NULL) |
goto dontblock; |
goto dontblock; |
error = so->so_error; |
if (so->so_error) { |
if ((flags & MSG_PEEK) == 0) |
error = so->so_error; |
so->so_error = 0; |
so->so_error = 0; |
|
} else { |
|
error = so->so_rerror; |
|
so->so_rerror = 0; |
|
} |
goto release; |
goto release; |
} |
} |
if (so->so_state & SS_CANTRCVMORE) { |
if (so->so_state & SS_CANTRCVMORE) { |
Line 1565 soreceive(struct socket *so, struct mbuf |
|
Line 1569 soreceive(struct socket *so, struct mbuf |
|
*/ |
*/ |
while (flags & MSG_WAITALL && m == NULL && uio->uio_resid > 0 && |
while (flags & MSG_WAITALL && m == NULL && uio->uio_resid > 0 && |
!sosendallatonce(so) && !nextrecord) { |
!sosendallatonce(so) && !nextrecord) { |
if (so->so_error || so->so_state & SS_CANTRCVMORE) |
if (so->so_error || so->so_rerror || |
|
so->so_state & SS_CANTRCVMORE) |
break; |
break; |
/* |
/* |
* If we are peeking and the socket receive buffer is |
* If we are peeking and the socket receive buffer is |
Line 2109 sockopt_set(struct sockopt *sopt, const |
|
Line 2114 sockopt_set(struct sockopt *sopt, const |
|
return error; |
return error; |
} |
} |
|
|
KASSERT(sopt->sopt_size == len); |
if (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 2169 sockopt_setmbuf(struct sockopt *sopt, st |
|
Line 2178 sockopt_setmbuf(struct sockopt *sopt, st |
|
return error; |
return error; |
} |
} |
|
|
KASSERT(sopt->sopt_size == len); |
if (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 2244 filt_soread(struct knote *kn, long hint) |
|
Line 2256 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) /* temporary udp error */ |
} else if (so->so_error || so->so_rerror) |
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 2283 filt_sowrite(struct knote *kn, long hint |
|
Line 2295 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) /* temporary udp error */ |
} else if (so->so_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)) |