static void as_uv_connect_error(as_event_command* cmd, as_error* err) { // Timer will be stopped in as_event_command_release(). // Watcher has not been registered yet. // libuv requires uv_close if socket released after uv_tcp_init succeeds. // The socket is the first field in as_event_connection, so just use connection. // The close callback will also free as_event_connection memory. uv_close((uv_handle_t*)cmd->conn, as_uv_connection_closed); as_event_decr_conn(cmd); as_event_error_callback(cmd, err); }
void as_event_connect_error(as_event_command* cmd, as_error* err, int fd) { // Only timer needs to be released on socket connection failure. // Watcher has not been registered yet. as_event_stop_timer(cmd); // Close fd when valid. if (fd >= 0) { close(fd); } cf_free(cmd->conn); as_event_decr_conn(cmd); as_event_error_callback(cmd, err); }