|
@@ -3705,9 +3705,15 @@ connection_handle_write_impl(connection_t *conn, int force)
|
|
if (connection_state_is_connecting(conn)) {
|
|
if (connection_state_is_connecting(conn)) {
|
|
if (getsockopt(conn->s, SOL_SOCKET, SO_ERROR, (void*)&e, &len) < 0) {
|
|
if (getsockopt(conn->s, SOL_SOCKET, SO_ERROR, (void*)&e, &len) < 0) {
|
|
log_warn(LD_BUG, "getsockopt() syscall failed");
|
|
log_warn(LD_BUG, "getsockopt() syscall failed");
|
|
- if (CONN_IS_EDGE(conn))
|
|
+ if (conn->type == CONN_TYPE_OR) {
|
|
- connection_edge_end_errno(TO_EDGE_CONN(conn));
|
|
+ or_connection_t *orconn = TO_OR_CONN(conn);
|
|
- connection_mark_for_close(conn);
|
|
+ connection_or_close_for_error(orconn, 0);
|
|
|
|
+ } else {
|
|
|
|
+ if (CONN_IS_EDGE(conn)) {
|
|
|
|
+ connection_edge_end_errno(TO_EDGE_CONN(conn));
|
|
|
|
+ }
|
|
|
|
+ connection_mark_for_close(conn);
|
|
|
|
+ }
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
if (e) {
|
|
if (e) {
|