diff options
author | Martin Sustrik <sustrik@250bpm.com> | 2012-04-29 07:59:52 +0200 |
---|---|---|
committer | Martin Sustrik <sustrik@250bpm.com> | 2012-04-29 07:59:52 +0200 |
commit | a84a77a4861c8fc1b0b6d3ec0931e83395cb34b5 (patch) | |
tree | da4c789d742994a55f4d6627af7b727dbcf68994 /src/ipc_connecter.cpp | |
parent | b89d87787f8a388ebec038cd60a6c3db41919c41 (diff) |
Fix TCP/IPC socket shutdown
When socket in the process of asynchronous connect is being closed
and the fact that there is no peer is found out at the same time
close() may return ECONNRESET. This patch handles this situation
decently.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Diffstat (limited to 'src/ipc_connecter.cpp')
-rw-r--r-- | src/ipc_connecter.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/ipc_connecter.cpp b/src/ipc_connecter.cpp index ec9c5b1..af3665c 100644 --- a/src/ipc_connecter.cpp +++ b/src/ipc_connecter.cpp @@ -206,16 +206,15 @@ int xs::ipc_connecter_t::open () return -1; } -int xs::ipc_connecter_t::close () +void xs::ipc_connecter_t::close () { if (s == retired_fd) - return 0; + return; int rc = ::close (s); - if (rc != 0) - return -1; + errno_assert (rc == 0 || errno == ECONNRESET); + s = retired_fd; - return 0; } xs::fd_t xs::ipc_connecter_t::connect () |