示例#1
0
void lcb_server_v1_read_handler(lcb_sockdata_t *sockptr, lcb_ssize_t nr)
{
    lcb_server_t *c;
    int rv;
    hrtime_t stop;

    if (!lcb_sockrw_v1_cb_common(sockptr, NULL, (void **)&c)) {
        return;
    }

    lcb_sockrw_v1_onread_common(sockptr, &c->connection.input, nr);

    c->inside_handler = 1;

    if (nr < 1) {
        event_complete_common(c, LCB_NETWORK_ERROR);
        return;
    }

    lcb_connection_delay_timer(&c->connection);

    stop = gethrtime();

    while ((rv = lcb_proto_parse_single(c, stop)) > 0) {
        /* do nothing */
    }

    if (rv >= 0) {
        /* Schedule the read request again */
        lcb_sockrw_set_want(&c->connection, LCB_READ_EVENT, 0);
    }
    event_complete_common(c, LCB_SUCCESS);
}
示例#2
0
static void v1_generic_read_handler(lcb_sockdata_t *sd, lcb_ssize_t nr)
{
    lcb_connection_t conn = sd->lcbconn;
    if (!lcb_sockrw_v1_cb_common(sd, NULL, NULL)) {
        return;
    }

    lcb_sockrw_v1_onread_common(sd, &sd->lcbconn->input, nr);
    if (nr < 1) {
        conn->easy.error(conn);
        return;

    } else {
        conn->easy.read(conn);
    }
}
示例#3
0
static void config_v1_read_handler(lcb_sockdata_t *sockptr, lcb_ssize_t nr)
{
    lcb_t instance;
    lcb_connection_t conn = sockptr->lcbconn;

    if (!lcb_sockrw_v1_cb_common(sockptr, NULL, (void **)&instance)) {
        return;
    }
    lcb_sockrw_v1_onread_common(sockptr, &conn->input, nr);
    if (nr < 1) {
        v1_error_common(instance);
        return;
    }

    lcb_sockrw_set_want(conn, LCB_READ_EVENT, 1);
    /* automatically does apply_want */
    handle_vbstream_read(instance);
}