diff --git a/src/imap-urlauth/imap-urlauth-client.c b/src/imap-urlauth/imap-urlauth-client.c index bf8af5d476..a48c67c943 100644 --- a/src/imap-urlauth/imap-urlauth-client.c +++ b/src/imap-urlauth/imap-urlauth-client.c @@ -341,9 +341,7 @@ void client_destroy(struct client *client, const char *reason) o_stream_destroy(&client->output); - net_disconnect(client->fd_in); - if (client->fd_in != client->fd_out) - net_disconnect(client->fd_out); + fd_close_maybe_stdio(&client->fd_in, &client->fd_out); if (client->username != NULL) i_free(client->username); diff --git a/src/imap-urlauth/imap-urlauth-worker.c b/src/imap-urlauth/imap-urlauth-worker.c index 84f80d33c6..d4ce48e061 100644 --- a/src/imap-urlauth/imap-urlauth-worker.c +++ b/src/imap-urlauth/imap-urlauth-worker.c @@ -255,10 +255,7 @@ static void client_destroy(struct client *client) if (client->ctrl_output != NULL) o_stream_destroy(&client->ctrl_output); - if (client->fd_in >= 0) - net_disconnect(client->fd_in); - if (client->fd_out >= 0 && client->fd_in != client->fd_out) - net_disconnect(client->fd_out); + fd_close_maybe_stdio(&client->fd_in, &client->fd_out); if (client->fd_ctrl >= 0) net_disconnect(client->fd_ctrl); diff --git a/src/imap/imap-client.c b/src/imap/imap-client.c index 162bdb869f..174aa36de0 100644 --- a/src/imap/imap-client.c +++ b/src/imap/imap-client.c @@ -400,9 +400,7 @@ static void client_default_destroy(struct client *client, const char *reason) timeout_remove(&client->to_idle); /* i/ostreams are already closed at this stage, so fd can be closed */ - net_disconnect(client->fd_in); - if (client->fd_in != client->fd_out) - net_disconnect(client->fd_out); + fd_close_maybe_stdio(&client->fd_in, &client->fd_out); /* Free the user after client is already disconnected. It may start some background work like autoexpunging. */ diff --git a/src/lib/connection.c b/src/lib/connection.c index 551fee38ef..0045149f67 100644 --- a/src/lib/connection.c +++ b/src/lib/connection.c @@ -308,13 +308,7 @@ void connection_disconnect(struct connection *conn) o_stream_close(conn->output); o_stream_destroy(&conn->output); } - if (conn->fd_in != -1) { - if (close(conn->fd_in) < 0) - i_error("close(%s) failed: %m", conn->name); - if (conn->fd_in != conn->fd_out && close(conn->fd_out) < 0) - i_error("close(%s/out) failed: %m", conn->name); - conn->fd_in = conn->fd_out = -1; - } + fd_close_maybe_stdio(&conn->fd_in, &conn->fd_out); } void connection_deinit(struct connection *conn) diff --git a/src/lmtp/client.c b/src/lmtp/client.c index 5650b41212..6bf435486a 100644 --- a/src/lmtp/client.c +++ b/src/lmtp/client.c @@ -301,9 +301,7 @@ void client_destroy(struct client *client, const char *prefix, i_stream_destroy(&client->input); o_stream_destroy(&client->output); - net_disconnect(client->fd_in); - if (client->fd_in != client->fd_out) - net_disconnect(client->fd_out); + fd_close_maybe_stdio(&client->fd_in, &client->fd_out); client_state_reset(client, "destroyed"); i_free(client->lhlo); pool_unref(&client->state_pool); diff --git a/src/pop3/pop3-client.c b/src/pop3/pop3-client.c index 4f5008c90d..9581c8aea3 100644 --- a/src/pop3/pop3-client.c +++ b/src/pop3/pop3-client.c @@ -642,9 +642,7 @@ static void client_default_destroy(struct client *client, const char *reason) i_stream_destroy(&client->input); o_stream_destroy(&client->output); - net_disconnect(client->fd_in); - if (client->fd_in != client->fd_out) - net_disconnect(client->fd_out); + fd_close_maybe_stdio(&client->fd_in, &client->fd_out); mail_storage_service_user_free(&client->service_user); pop3_client_count--;