Merge r208601 from head to stable/8:
When close() is called on a connected socket pair, SO_ISCONNECTED might be set but be cleared before the call to sodisconnect(). In this case, ENOTCONN is returned: suppress this error rather than returning it to userspace so that close() doesn't report an error improperly. PR: kern/144061 Reported by: Matt Reimer <mreimer at vpop.net>, Nikolay Denev <ndenev at gmail.com>, Mikolaj Golub <to.my.trociny at gmail.com> Approved by: re (kib)
This commit is contained in:
parent
a221dbe3dc
commit
dac680de2d
@ -656,8 +656,11 @@ soclose(struct socket *so)
|
||||
if (so->so_state & SS_ISCONNECTED) {
|
||||
if ((so->so_state & SS_ISDISCONNECTING) == 0) {
|
||||
error = sodisconnect(so);
|
||||
if (error)
|
||||
if (error) {
|
||||
if (error == ENOTCONN)
|
||||
error = 0;
|
||||
goto drop;
|
||||
}
|
||||
}
|
||||
if (so->so_options & SO_LINGER) {
|
||||
if ((so->so_state & SS_ISDISCONNECTING) &&
|
||||
|
Loading…
x
Reference in New Issue
Block a user