mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-27 21:14:44 +08:00
net/smc: sync err code when tcp connection was refused
[ Upstream commit4e2e65e2e5
] In the current implementation, when TCP initiates a connection to an unavailable [ip,port], ECONNREFUSED will be stored in the TCP socket, but SMC will not. However, some apps (like curl) use getsockopt(,,SO_ERROR,,) to get the error information, which makes them miss the error message and behave strangely. Fixes:50717a37db
("net/smc: nonblocking connect rework") Signed-off-by: liuyacan <liuyacan@corp.netease.com> Reviewed-by: Tony Lu <tonylu@linux.alibaba.com> Acked-by: Karsten Graul <kgraul@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
8c59a61ffb
commit
479dc5d153
@ -1223,6 +1223,8 @@ static void smc_connect_work(struct work_struct *work)
|
||||
smc->sk.sk_state = SMC_CLOSED;
|
||||
if (rc == -EPIPE || rc == -EAGAIN)
|
||||
smc->sk.sk_err = EPIPE;
|
||||
else if (rc == -ECONNREFUSED)
|
||||
smc->sk.sk_err = ECONNREFUSED;
|
||||
else if (signal_pending(current))
|
||||
smc->sk.sk_err = -sock_intr_errno(timeo);
|
||||
sock_put(&smc->sk); /* passive closing */
|
||||
|
Loading…
Reference in New Issue
Block a user