diff options
author | Joe Orton <jorton@redhat.com> | 2021-09-20 10:42:21 +0100 |
---|---|---|
committer | Joe Orton <jorton@redhat.com> | 2021-09-20 10:42:21 +0100 |
commit | 1e1d56aa8d4f67754188a00d11078f148df5e9cd (patch) | |
tree | f24de28f6983a41a9f4c53545eea6a3ffd20cf1d | |
parent | 61cffebfa56391647aa59dd31996dc3664703700 (diff) | |
download | neon-git-1e1d56aa8d4f67754188a00d11078f148df5e9cd.tar.gz |
* src/ne_socket.c (ne_sock_close): Skip calling shutdown for a
newly-opened socket.
* test/socket.c (open_close): Test closing a newly-opened socket
object.
-rw-r--r-- | src/ne_socket.c | 13 | ||||
-rw-r--r-- | test/socket.c | 9 |
2 files changed, 16 insertions, 6 deletions
diff --git a/src/ne_socket.c b/src/ne_socket.c index 0492431..a86e41a 100644 --- a/src/ne_socket.c +++ b/src/ne_socket.c @@ -2087,7 +2087,12 @@ int ne_sock_shutdown(ne_socket *sock, unsigned int flags) int ne_sock_close(ne_socket *sock) { - int ret = ne_sock_shutdown(sock, NE_SOCK_SEND); + int ret; + + if (sock->fd != -1) { + /* Ignore errors. */ + (void) ne_sock_shutdown(sock, NE_SOCK_SEND); + } #if defined(HAVE_OPENSSL) if (sock->ssl) { @@ -2099,11 +2104,7 @@ int ne_sock_close(ne_socket *sock) } #endif - if (sock->fd < 0) - ret = 0; - else - ret = ne_close(sock->fd); - sock->fd = -1; + ret = sock->fd < 0 ? 0 : ne_close(sock->fd); ne_free(sock); return ret; diff --git a/test/socket.c b/test/socket.c index fe842d6..8ec63b1 100644 --- a/test/socket.c +++ b/test/socket.c @@ -538,6 +538,14 @@ static int read_close(void) return await_server(); } +/* Test that just does an open then a close. */ +static int open_close(void) +{ + ONN("close of newly opened socket failed", ne_sock_close(ne_sock_create())); + + return OK; +} + /* Test that just does a connect then a close (but gets the close via * ne_sock_peek). */ static int peek_close(void) @@ -1570,6 +1578,7 @@ ne_test tests[] = { T(addr_canonical), T(read_close), T(peek_close), + T(open_close), T(single_read), T(single_peek), T(small_reads), |