From 1e1d56aa8d4f67754188a00d11078f148df5e9cd Mon Sep 17 00:00:00 2001 From: Joe Orton Date: Mon, 20 Sep 2021 10:42:21 +0100 Subject: * 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. --- src/ne_socket.c | 13 +++++++------ 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), -- cgit v1.2.1