int memcache_wait (struct connection *c) { if (verbosity > 2) { fprintf (stderr, "wait for aio..\n"); } if (c->flags & C_INTIMEOUT) { if (verbosity > 1) { fprintf (stderr, "memcache_get: IN TIMEOUT (%p)\n", c); } WaitAioArrClear (); return 0; } if (c->Out.total_bytes > 8192) { c->flags |= C_WANTWR; c->type->writer (c); } if (!WaitAioArrPos) { fprintf (stderr, "WaitAio=0 - no memory to load user metafile, query dropped.\n"); return 0; } int i; for (i = 0; i < WaitAioArrPos; i++) { conn_schedule_aio (WaitAioArr[i], c, 1.1 * aio_t, &aio_metafile_query_type); } set_connection_timeout (c, aio_t); WaitAioArrClear (); return 0; }
/* when need to send an ack pakcet, invoke the function */ void send_ack_packet(int ack_num, bt_config_t* config, bt_peer_t* toPeer) { int len; /* ack_num == 0 means duplicate data packet */ if (ack_num == 0) return; DPRINTF(DEBUG_SOCKETS, "send ack packet: %d\n", ack_num-1); /* generate ack packet */ char* packet = generate_ack(ack_num, &len); /* send ack packet */ send_packet(config->sock, packet, len, 0, (struct sockaddr *)&toPeer->addr, sizeof(toPeer->addr)); free(packet); /* reset timer */ set_connection_timeout(toPeer->down_con, CONNECTION_TIMEOUT, 0); }