static void togo_wt_read_cb(struct bufferevent *bev, void *arg) { TOGO_THREAD_ITEM * socket_item = (TOGO_THREAD_ITEM *) arg; /* Read the network data from socket */ enum TOGO_READ_NETWORK read_ret = togo_command_read_network(bev, socket_item); if (read_ret == READ_DATA_RECEIVED) { while (1) { if (socket_item->rbytes == 0) { break; } if (socket_item->rstatus == 1) { BOOL ret = togo_command_read_big_data(socket_item, togo_wt_send_cb); if (ret == FALSE) { togo_wt_destroy_socket(bev, socket_item); break; } continue; } if (socket_item->rstatus == 2) { BOOL skip_ret = togo_command_read_big_data_skip(socket_item); if (skip_ret == FALSE) { togo_wt_destroy_socket(bev, socket_item); break; } continue; } BOOL parse_ret = togo_command_parse_command(socket_item, togo_wt_send_cb); if (parse_ret == TRUE) { if (socket_item->rbytes > 0) { continue; } } else { /* If can't parse any command and the read buffer's size * more than TOGO_S_RBUF_MAX_SIZE, we must to close the socket. */ if (socket_item->rsize >= TOGO_S_RBUF_MAX_SIZE) { togo_wt_destroy_socket(bev, socket_item); } } break; } } }
void togo_server_disconnect(TOGO_THREAD_ITEM * socket_item) { if (socket_item != NULL && socket_item->bev != NULL) { togo_wt_destroy_socket(socket_item->bev, socket_item); } }
static void togo_wt_event_cb(struct bufferevent *bev, short event, void *arg) { TOGO_THREAD_ITEM * socket_item = (TOGO_THREAD_ITEM *) arg; if (event & (BEV_EVENT_EOF | BEV_EVENT_ERROR)) { togo_wt_destroy_socket(bev, socket_item); } }
static void togo_wt_event_cb(struct bufferevent *bev, short event, void *arg) { TOGO_THREAD_ITEM * socket_item = (TOGO_THREAD_ITEM *) arg; togo_wt_destroy_socket(bev, socket_item); }