Fix issue where shutdown(socket, SHUT_RD) was effectively

ignored for TCP sockets.

NetBSD PR:	18185
Submitted by:	Sean Boudreau <seanb@qnx.com>
MFC after:	3 days
This commit is contained in:
Mike Silbersack 2002-09-22 02:54:07 +00:00
parent 8c6bc30900
commit c1c36a2c68
2 changed files with 20 additions and 6 deletions

View file

@ -1057,8 +1057,12 @@ after_listen:
/*
* Add data to socket buffer.
*/
m_adj(m, drop_hdrlen); /* delayed header drop */
sbappend(&so->so_rcv, m);
if (so->so_state & SS_CANTRCVMORE) {
m_freem(m);
} else {
m_adj(m, drop_hdrlen); /* delayed header drop */
sbappend(&so->so_rcv, m);
}
sorwakeup(so);
if (DELAY_ACK(tp)) {
callout_reset(tp->tt_delack, tcp_delacktime,
@ -2086,7 +2090,10 @@ dodata: /* XXX */
tcpstat.tcps_rcvpack++;
tcpstat.tcps_rcvbyte += tlen;
ND6_HINT(tp);
sbappend(&so->so_rcv, m);
if (so->so_state & SS_CANTRCVMORE)
m_freem(m);
else
sbappend(&so->so_rcv, m);
sorwakeup(so);
} else {
thflags = tcp_reass(tp, th, &tlen, m);

View file

@ -1057,8 +1057,12 @@ after_listen:
/*
* Add data to socket buffer.
*/
m_adj(m, drop_hdrlen); /* delayed header drop */
sbappend(&so->so_rcv, m);
if (so->so_state & SS_CANTRCVMORE) {
m_freem(m);
} else {
m_adj(m, drop_hdrlen); /* delayed header drop */
sbappend(&so->so_rcv, m);
}
sorwakeup(so);
if (DELAY_ACK(tp)) {
callout_reset(tp->tt_delack, tcp_delacktime,
@ -2086,7 +2090,10 @@ dodata: /* XXX */
tcpstat.tcps_rcvpack++;
tcpstat.tcps_rcvbyte += tlen;
ND6_HINT(tp);
sbappend(&so->so_rcv, m);
if (so->so_state & SS_CANTRCVMORE)
m_freem(m);
else
sbappend(&so->so_rcv, m);
sorwakeup(so);
} else {
thflags = tcp_reass(tp, th, &tlen, m);