• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ bufferevent_setcb函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中bufferevent_setcb函数的典型用法代码示例。如果您正苦于以下问题:C++ bufferevent_setcb函数的具体用法?C++ bufferevent_setcb怎么用?C++ bufferevent_setcb使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了bufferevent_setcb函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: listen_cb

static void
listen_cb(struct evconnlistener *listener, evutil_socket_t fd,
    struct sockaddr *sa, int socklen, void *arg)
{
	struct event_base *base = arg;
	struct bufferevent *bev;
	const char s[] = TEST_STR;
	bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE);
	bufferevent_write(bev, s, sizeof(s));
	bufferevent_setcb(bev, NULL, sender_writecb, sender_errorcb, NULL);
	bufferevent_enable(bev, EV_WRITE);
}
开发者ID:kjg,项目名称:libevent,代码行数:12,代码来源:regress_bufferevent.c


示例2: bufferevent_setcb

 void BufferEvent::SetCallBack(BufferEventDataCallBack *readcb, BufferEventDataCallBack *writecb,
                               BufferEventEvCallBack *eventcb) {
     std::cerr << "Callback set" << std::endl;
     this->readcb_ = readcb;
     this->writecb_ = writecb;
     this->eventcb_ = eventcb;
     bufferevent_setcb(bufev_,
                       _bufev_wrap_read_callback,
                       _bufev_wrap_write_callback,
                       _bufev_wrap_event_callback,
                       (void*)this);
 }
开发者ID:tattsun,项目名称:dust,代码行数:12,代码来源:Event.cpp


示例3: on_accept

void on_accept(int fd,short,void* arg){
	struct event_base* base = reinterpret_cast<struct event_base*>(arg);
	struct sockaddr_in peer_addr;
	memset(&peer_addr,0,sizeof(peer_addr));
	socklen_t len=0;
	int clientfd = accept(fd,(struct sockaddr*)&peer_addr,&len);
	evutil_make_socket_nonblocking(clientfd);
	auto bv = bufferevent_socket_new(base,clientfd,BEV_OPT_CLOSE_ON_FREE);
	bufferevent_setcb(bv,readcb,writecb,eventcb,base);
	bufferevent_enable(bv,EV_READ );
	
}
开发者ID:YukWu,项目名称:libevent_example,代码行数:12,代码来源:echo.cpp


示例4: bufferevent_socket_new

void BaseServer::listener_callback(struct evconnlistener *listener, int fd, struct sockaddr *sa, int socklen, void *arg)
{
    event_base *base = (event_base*)arg;
    struct bufferevent* bev = bufferevent_socket_new(base,fd,BEV_OPT_CLOSE_ON_FREE);
    assert(bev);
    bufferevent_setwatermark(bev,EV_READ,0,0);
    bufferevent_setwatermark(bev,EV_WRITE,0,0);

    bufferevent_setcb(bev,read_callback,write_callback,NULL,NULL);
    bufferevent_enable(bev,EV_READ);

}
开发者ID:yzqcode,项目名称:WebServer,代码行数:12,代码来源:baseserver.cpp


示例5: accept_conn_callback

static void accept_conn_callback(
    struct evconnlistener *listener,
    evutil_socket_t fd,
    struct sockaddr *address,
    int socklen,
    void *context)
{
    struct event_base *base = evconnlistener_get_base(listener);    
    struct bufferevent *bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE);
    bufferevent_setcb(bev, echo_read_cb, NULL, echo_event_cb, NULL);
    bufferevent_enable(bev, EV_READ | EV_WRITE);
}
开发者ID:optiklab,项目名称:multithreaded-network-programming-examples,代码行数:12,代码来源:4_libevent_server.c


示例6: drained_writecb

static void
drained_writecb(struct bufferevent *bev, void *ctx)
{
	struct bufferevent *partner = ctx;

	/* We were choking the other side until we drained our outbuf a bit.
	 * Now it seems drained. */
	bufferevent_setcb(bev, readcb, NULL, eventcb, partner);
	bufferevent_setwatermark(bev, EV_WRITE, 0, 0);
	if (partner)
		bufferevent_enable(partner, EV_READ);
}
开发者ID:sambuc,项目名称:netbsd,代码行数:12,代码来源:le-proxy.c


示例7: accept_conn_cb

static void accept_conn_cb(struct evconnlistener *listener,
    evutil_socket_t fd, struct sockaddr *address, int socklen,
    void *ctx)
{
        /* We got a new connection! Set up a bufferevent for it. */
        struct event_base *base = evconnlistener_get_base(listener);
        struct bufferevent *bev = bufferevent_socket_new(
                base, fd, BEV_OPT_CLOSE_ON_FREE);
 
        bufferevent_setcb(bev, echo_read_cb, NULL, echo_event_cb, NULL);
        bufferevent_enable(bev, EV_READ|EV_WRITE);
}
开发者ID:RaoHai,项目名称:chinese_full_text_search,代码行数:12,代码来源:key_value_tcp.c


示例8: new_connection

static void new_connection(state *s) {
    struct bufferevent *bev;
    struct timeval timeout={3, 0}; /* 3 seconds */

    s->mode=0;
    s->ptr=0;
    s->len=sizeof(record);
    bev=bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);
    bufferevent_set_timeouts(bev, &timeout, &timeout);
    bufferevent_setcb(bev, read_cb, write_cb, event_cb, s);
    bufferevent_socket_connect(bev, addr, addr_len);
}
开发者ID:0x7E,项目名称:letshandshake,代码行数:12,代码来源:letshandshake.c


示例9: chlderrcb

void
chlderrcb(struct bufferevent *b, short what, void *arg)
{
	int *nprocs =(int *)arg;

	bufferevent_setcb(b, nil, nil, nil, nil);
	bufferevent_disable(b, EV_READ | EV_WRITE);
	bufferevent_free(b);
	
	/*if(--(*nprocs) == 0)
		event_loopbreak();*/
}
开发者ID:Erkan-Yilmaz,项目名称:hummingbird,代码行数:12,代码来源:hstress.c


示例10: drone_rampup_timer_cb

static void drone_rampup_timer_cb(evutil_socket_t fd, short what, void *arg) {
    struct job *job = arg;
    Drone__JobRequest *request = job->request;
    struct session *session;
    struct bufferevent *bev;
    struct sockaddr_in echo_sin;
    struct timeval timeout;
    u_int64_t sessions;
    u_int64_t i;

    if (job->client == NULL)
        return;

    if ((request->sessions - job->cur_sessions) > request->rampup_sessions)
        sessions = request->rampup_sessions;
    else
        sessions = request->sessions - job->cur_sessions;

    memset(&echo_sin, 0, sizeof(echo_sin));
    echo_sin.sin_family = AF_INET;
    echo_sin.sin_addr.s_addr = htonl(request->ipv4);
    echo_sin.sin_port = htons(request->port);

    for (i = 0; i < sessions; i++) {
        bev = bufferevent_socket_new(job->client->base, -1,
                BEV_OPT_CLOSE_ON_FREE);

        session = malloc(sizeof(struct session));

        bufferevent_setcb(bev, drone_read_cb, NULL, drone_event_cb, session);
        bufferevent_enable(bev, EV_READ | EV_WRITE);

        timeout.tv_sec = request->timeout;
        timeout.tv_usec = 0;
        bufferevent_set_timeouts(bev, NULL, &timeout);

        if (bufferevent_socket_connect(bev, (struct sockaddr *) &echo_sin,
                sizeof(echo_sin)) < 0) {
            bufferevent_free(bev);
            free(session);
            perror("Error during connection");
            return;
        }

        session->job = job;
        session->bev = bev;
        session->remaining_data = 0;

        job->sessions[job->cur_sessions] = session;
        job->cur_sessions++;
    }
}
开发者ID:safchain,项目名称:ml-stress,代码行数:52,代码来源:drone.c


示例11: peers_connect

static void
peers_connect(struct peers* p, int id, struct sockaddr_in* addr)
{
	p->peers = realloc(p->peers, sizeof(struct peer*) * (p->peers_count+1));
	p->peers[p->peers_count] = make_peer(p, id, addr);
	
	struct peer* peer = p->peers[p->peers_count];
	bufferevent_setcb(peer->bev, on_read, NULL, on_peer_event, peer);
	peer->reconnect_ev = evtimer_new(p->base, on_connection_timeout, peer);
	connect_peer(peer);

	p->peers_count++;
}
开发者ID:carpe-noctem-cassel,项目名称:cace,代码行数:13,代码来源:peers.c


示例12: finish_connection

static void
finish_connection(struct conninfo *info, int ok, const char *reason)
{
	mem_free(conn_error_string);
	conn_error_string = NULL;
	if (!ok)
		conn_error_string = mem_strdup(reason);
	bufferevent_disable(info->bev, EV_READ);
	bufferevent_setcb(info->bev, NULL, NULL, NULL, NULL);
	info->on_connect(info->bev, ok, info->cbarg);
	mem_free(info->host);
	mem_free(info);
}
开发者ID:0xffea,项目名称:shim,代码行数:13,代码来源:conn.c


示例13: socks_flush

void
socks_flush(struct socks_data *data)
{
	struct evbuffer *buf;
	buf = bufferevent_get_output(data->bev);
	if (evbuffer_get_length(buf)) {
		bufferevent_disable(data->bev, EV_READ);
		bufferevent_setwatermark(data->bev, EV_WRITE, 0, 16384);
		bufferevent_setcb(data->bev, NULL, socks_flush_fin,
				socks_request_error, data);
	} else
		socks_flush_fin(data->bev, data);
}
开发者ID:stxh,项目名称:tunsocks,代码行数:13,代码来源:socks.c


示例14: socks_request_cb

static void
socks_request_cb(struct bufferevent *bev, void *ctx)
{
	struct socks_data *data = ctx;

	if (evbuffer_get_length(bufferevent_get_input(bev)) < data->req_len) {
		bufferevent_enable(bev, EV_READ);
		bufferevent_setwatermark(bev, EV_READ, data->req_len, 2048);
		bufferevent_setcb(bev, socks_request_cb, NULL,
					socks_request_error, ctx);
	} else
		data->req_cb(ctx);
}
开发者ID:stxh,项目名称:tunsocks,代码行数:13,代码来源:socks.c


示例15: drained_writecbout

	static void
drained_writecbout(struct bufferevent *bev_out, void *ctx_in)
{
	fprintf(stderr, "drained_writecbout adjust the wartermark of <proxy->server>\n");
	struct bufferevent *partner_in = ctx_in;

	/* We were choking the other side until we drained our outbuf a bit.
	 * Now it seems drained. */
	bufferevent_setcb(bev_out, readcbout, NULL, eventcbout, partner_in);
	bufferevent_setwatermark(bev_out, EV_WRITE, 0, 0);
	if (partner_in)
		bufferevent_enable(partner_in, EV_READ);
}
开发者ID:hzsunzixiang,项目名称:programming,代码行数:13,代码来源:proxy2.c


示例16: watcher_new_conn

static void watcher_new_conn(struct evconnlistener *listener,
			     evutil_socket_t fd, struct sockaddr *address,
			     int socklen, void *vctx)
{
	struct watcher_ctx *ctx = vctx;
	struct bufferevent *bev;

	ctx->refcount++;
	bev = bufferevent_socket_new(ctx->event_base, fd,
				     BEV_OPT_CLOSE_ON_FREE);
	bufferevent_setcb(bev, NULL, NULL, watcher_conn_closed, vctx);
	bufferevent_enable(bev, EV_READ | EV_WRITE);
}
开发者ID:cernekee,项目名称:ocproxy,代码行数:13,代码来源:vpnns.c


示例17: drained_writecbin

	static void
drained_writecbin(struct bufferevent *bev_in, void *ctx_out)
{
	fprintf(stderr, "drained_writecbin adjust the wartermark of <client-proxy>\n");
	struct bufferevent *partner_out= ctx_out;

	/* We were choking the other side until we drained our outbuf a bit.
	 * Now it seems drained. */
	bufferevent_setcb(bev_in, readcbin, NULL, eventcbin, partner_out);
	bufferevent_setwatermark(bev_in, EV_WRITE, 0, 0);
	if (partner_out)
		bufferevent_enable(partner_out, EV_READ);
}
开发者ID:hzsunzixiang,项目名称:programming,代码行数:13,代码来源:proxy2.c


示例18: read_callback

/*
 * if some data are in input buffer, copy it to remote bufferevent output buffer
 */
void read_callback(struct bufferevent *bev, void *ptr)
{
	struct bev_arg *bev_arg=ptr;
	size_t len;

	/* if remote bufferevent exist */
	if (bev_arg->remote) {
		struct bufferevent *bev_remote=bev_arg->remote->bev;

		/* update stats */
		len = evbuffer_get_length(bufferevent_get_input(bev));
		if (len) {
			/* update stats */
			if (bev_arg->type==BEV_CLIENT) {
				bev_arg->listener->input_bytes+=len;
			} else if (bev_arg->type==BEV_TARGET) {
				bev_arg->listener->output_bytes+=len;
			}
		}

		/* write data from our intput buffer to remote output buffer */
		//if (bufferevent_read_buffer(bev, bufferevent_get_output(bev_remote))==-1) {
		if (bufferevent_write_buffer(bev_remote, bufferevent_get_input(bev))==-1) {
			/* if error, close our socket, remote socket and free everything */
			bev_arg->listener->nr_conn--;

			bufferevent_free(bev);
			bufferevent_free(bev_remote);
			free(bev_arg->remote);
			free(bev_arg);

			return;
		}

		/* If remote bufferevent has more data than OUTPUT_BUFFER_LIMIT 
		 * disable EV_READ on our bev and enable write_callback on remote bev.
		 * We enable EV_READ again when all data on remote socket buffer are written,
		 * this is done in write_callback() when remote socket write event is triggered.
		*/
		if (evbuffer_get_length(bufferevent_get_output(bev_remote)) >= OUTPUT_BUFFER_LIMIT) {
			bufferevent_disable(bev, EV_READ);
			bufferevent_setcb(bev_remote, read_callback, write_callback, event_callback, (void *)bev_arg->remote);
		}
	} else {
		/* remote socket is closed, free self */
		bev_arg->listener->nr_conn--;

		bufferevent_free(bev);
		free(bev_arg);
	}
}
开发者ID:Apploud,项目名称:rum,代码行数:54,代码来源:default_callback.c


示例19: main

int
main ()
{
    int sockfd;
    struct bufferevent *p_event;
    struct sockaddr_in addr;

    ff = fopen("/tmp/log", "w");
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(PORT);

    if (inet_pton(AF_INET, SVRADDR, &addr.sin_addr) <= 0) {
        printf("inet_pton");
        exit(1);
    }

    if ((p_base = event_base_new()) == NULL) {
        printf("event_base_new ");
        return 1;
    }

    /* we do not need invoke socket function to create socket */
    if ((p_event = bufferevent_socket_new(p_base, -1, BEV_OPT_CLOSE_ON_FREE)) == NULL) {
        printf("bufferevent_socket_new ");
        return 1;
    }

    /* client actually connecte to server at this time. */
    if ((sockfd = bufferevent_socket_connect(p_event, (struct sockaddr *) &addr,
                                             sizeof(addr))) < 0) {
        printf("bufferevent_socket_connect ");
        return 1;
    }

    /* EV_WRITE is default enabled, EV_READ is default disabled */
    /* So If we disable READ, evbuffer callback will not be added to base (read and write) */
    bufferevent_setcb(p_event, buff_input_cb, NULL, eventcb, p_base);
    bufferevent_enable(p_event, EV_WRITE);

    /* edge-triggered */
    /* default read low-water  mark is 0. */
    /* default read high-water mark is unlimited. */

    /* If the underlying data received over 20, remove the READ event from base */
    bufferevent_setwatermark(p_event, EV_READ, 10, 20);

    event_base_dispatch(p_base);

    return 0;
}
开发者ID:dong777,项目名称:libevent_sample,代码行数:51,代码来源:read_watermark_test.c


示例20: pending_read

static void pending_read(struct bufferevent *bev, void *pending_ptr) {
  struct evwspendingconn* pending = (struct evwspendingconn *)pending_ptr;
  struct evbuffer* input = bufferevent_get_input(pending->bev);
  struct evbuffer_ptr end = evbuffer_search(input, "\r\n\r\n", 4, NULL);
  size_t len = evbuffer_get_length(input);

  if (end.pos == -1) {
    if (len > MAX_HTTP_HEADER_SIZE) {
      remove_pending(pending);
      free_pending(pending);
    }
    return; // full request not yet found
  }

  unsigned char* data = evbuffer_pullup(input, len);
  char accept_key[29];

  struct evwsconnlistener* levws = pending->levws;
  const char* subprotocol = NULL;
  if (evaluate_websocket_handshake((char*)data, len,
      levws->supported_subprotocols, accept_key, &subprotocol)) {
    remove_pending(pending);
    free_pending(pending);
    return;
  }

  evbuffer_drain(input, len);

  bufferevent_setcb(pending->bev, NULL, NULL, NULL, pending);

  struct evbuffer* output = bufferevent_get_output(pending->bev);
  evbuffer_add_printf(output,
      "HTTP/1.1 101 Switching Protocols\r\n"
      "Upgrade: websocket\r\n"
      "Connection: Upgrade\r\n"
      "Sec-WebSocket-Accept: %s\r\n", accept_key);

  if (subprotocol != NULL) {
    evbuffer_add_printf(output, "Sec-WebSocket-Protocol: %s\r\n\r\n",
        subprotocol);
  } else {
    evbuffer_add_printf(output, "\r\n");
  }

  remove_pending(pending);
  struct evwsconn *wsconn = evwsconn_new(pending->bev, subprotocol);
  pending->bev = NULL;
  levws->cb(levws, wsconn, pending->address, pending->socklen,
      levws->user_data);
  free_pending(pending);
}
开发者ID:crunchyfrog,项目名称:libevws,代码行数:51,代码来源:wslistener.c



注:本文中的bufferevent_setcb函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ bufferevent_socket_connect函数代码示例发布时间:2022-05-30
下一篇:
C++ bufferevent_new函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap