diff --git a/net.c b/net.c index 9c8013e..9ae8215 100644 --- a/net.c +++ b/net.c @@ -44,15 +44,20 @@ extern struct connection_methods auth_methods; void fail_connection (struct connection *c); +#define PING_TIMEOUT 10 + void start_ping_timer (struct connection *c); int ping_alarm (struct connection *c) { if (verbosity > 2) { logprintf ("ping alarm\n"); } - if (get_double_time () - c->last_receive_time > 20) { + if (get_double_time () - c->last_receive_time > 20 * PING_TIMEOUT) { + if (verbosity) { + logprintf ( "fail connection: reason: ping timeout\n"); + } c->state = conn_failed; fail_connection (c); - } else if (get_double_time () - c->last_receive_time > 5 && c->state == conn_ready) { + } else if (get_double_time () - c->last_receive_time > 5 * PING_TIMEOUT && c->state == conn_ready) { int x[3]; x[0] = CODE_ping; *(long long *)(x + 1) = lrand48 () * (1ll << 32) + lrand48 (); @@ -69,7 +74,7 @@ void stop_ping_timer (struct connection *c) { } void start_ping_timer (struct connection *c) { - c->ev.timeout = get_double_time () + 1; + c->ev.timeout = get_double_time () + PING_TIMEOUT; c->ev.alarm = (void *)ping_alarm; c->ev.self = c; insert_event_timer (&c->ev); @@ -358,6 +363,9 @@ void try_write (struct connection *c) { delete_connection_buffer (b); } else { if (errno != EAGAIN && errno != EWOULDBLOCK) { + if (verbosity) { + logprintf ("fail_connection: write_error %m\n"); + } fail_connection (c); return; } else { @@ -459,6 +467,9 @@ void try_read (struct connection *c) { c->in_tail = b; } else { if (errno != EAGAIN && errno != EWOULDBLOCK) { + if (verbosity) { + logprintf ("fail_connection: read_error %m\n"); + } fail_connection (c); return; } else { @@ -512,7 +523,7 @@ void connections_poll_result (struct pollfd *fds, int max) { } if (fds[i].revents & (POLLHUP | POLLERR | POLLRDHUP)) { if (verbosity) { - logprintf ( "fail connection\n"); + logprintf ("fail_connection: events_mask=0x%08x\n", fds[i].revents); } fail_connection (c); } else if (fds[i].revents & POLLOUT) { diff --git a/queries.c b/queries.c index adb99df..85b4a54 100644 --- a/queries.c +++ b/queries.c @@ -56,7 +56,7 @@ long long cur_downloading_bytes; long long cur_downloaded_bytes; void out_peer_id (peer_id_t id); -#define QUERY_TIMEOUT 0.3 +#define QUERY_TIMEOUT 6.0 #define memcmp8(a,b) memcmp ((a), (b), 8) DEFINE_TREE (query, struct query *, memcmp8, 0) ; @@ -80,6 +80,10 @@ int alarm_query (struct query *q) { q->ev.timeout = get_double_time () + QUERY_TIMEOUT; insert_event_timer (&q->ev); + if (q->session->c->out_bytes >= 100000) { + return 0; + } + clear_packet (); out_int (CODE_msg_container); out_int (1);