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;
}
Exemple #2
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);
}