/* connect to server */ int hammer_handler_connect(hammer_connection_t *c) { struct sockaddr_in address; int ret, socket; hammer_sched_t *sched = hammer_sched_get_sched_struct(); hammer_connection_t *new_c; socket = hammer_socket_create(); address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr(config->server_ip); address.sin_port = htons(config->server_port); ret = hammer_socket_connect(socket,(struct sockaddr *)&address, (socklen_t)sizeof(address)); if (ret != 0) { printf("connect error\n"); return -1; } /* Get a connection and associate with the epoll event */ new_c = hammer_get_connection(); hammer_init_connection(new_c); /* Assign socket to worker thread */ hammer_sched_add_connection(new_c, sched, c); return 0; }
hammer_job_t *hammer_job_get() { #if defined(HAMMER_MALLOC) return (hammer_job_t *)hammer_mem_malloc(sizeof(hammer_job_t)); #else hammer_sched_t *sched = hammer_sched_get_sched_struct(); return (hammer_job_t *)libpool_alloc(JOB_SIZE, sched->thread_id); #endif }
hammer_connection_t *hammer_get_connection() { #if defined(HAMMER_MALLOC) return hammer_mem_malloc(sizeof(hammer_connection_t)); #else hammer_sched_t *sched = hammer_sched_get_sched_struct(); return (hammer_connection_t *)libpool_alloc(CONN_SIZE, sched->thread_id); #endif }
void hammer_free_connection(hammer_connection_t *c) { #if defined(HAMMER_MALLOC) hammer_mem_free(c); #else hammer_sched_t *sched = hammer_sched_get_sched_struct(); libpool_free(c, CONN_SIZE, sched->thread_id); #endif return; }
int hammer_job_del(hammer_job_t *job) { #if defined(HAMMER_MALLOC) hammer_mem_free(job); #else hammer_sched_t *sched = hammer_sched_get_sched_struct(); libpool_free(job, JOB_SIZE, sched->thread_id); #endif return 0 }
// we delete both the two connections int hammer_sched_del_connection(hammer_connection_t *c) { hammer_sched_t *sched = hammer_sched_get_sched_struct(); /* remove this connection */ hammer_epoll_del(sched->epoll_fd, c->socket); hammer_close_connection(c); sched->closed_connections ++; /* remove its corresponding connection */ if (c->rc != NULL) { hammer_epoll_del(sched->epoll_fd, c->rc->socket); hammer_close_connection(c->rc); sched->closed_connections ++; } return 0; }