From ba3ae71d136a3a360071f0b1c409baee6417d7fe Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Wed, 3 Mar 2004 07:26:34 +0000 Subject: [PATCH] close immediately when write() fails too, else things will turn bad svn:r1212 --- trunk/src/or/connection.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/trunk/src/or/connection.c b/trunk/src/or/connection.c index 58e82616af..1ec9df3006 100644 --- a/trunk/src/or/connection.c +++ b/trunk/src/or/connection.c @@ -568,7 +568,12 @@ int connection_handle_write(connection_t *conn) { conn->state != OR_CONN_STATE_CONNECTING) { if (conn->state == OR_CONN_STATE_HANDSHAKING) { connection_stop_writing(conn); - return connection_tls_continue_handshake(conn); + if(connection_tls_continue_handshake(conn) < 0) { + connection_close_immediate(conn); /* Don't flush; connection is dead. */ + connection_mark_for_close(conn, 0); + return -1; + } + return 0; } /* else open, or closing */ @@ -576,6 +581,7 @@ int connection_handle_write(connection_t *conn) { case TOR_TLS_ERROR: case TOR_TLS_CLOSE: log_fn(LOG_INFO,"tls error. breaking."); + connection_close_immediate(conn); /* Don't flush; connection is dead. */ connection_mark_for_close(conn, 0); return -1; /* XXX deal with close better */ case TOR_TLS_WANTWRITE: @@ -601,6 +607,7 @@ int connection_handle_write(connection_t *conn) { } } else { if (flush_buf(conn->s, conn->outbuf, &conn->outbuf_flushlen) < 0) { + connection_close_immediate(conn); /* Don't flush; connection is dead. */ connection_mark_for_close(conn, END_STREAM_REASON_MISC); return -1; }