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);
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);
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. */
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)
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);
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--;