Commit a0645402 authored by vysheng's avatar vysheng

Some fixes in network

parent 433ce145
......@@ -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) {
......
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment