本文整理汇总了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;未经允许,请勿转载。 |
请发表评论