本文整理汇总了C++中bufferevent_socket_connect函数的典型用法代码示例。如果您正苦于以下问题:C++ bufferevent_socket_connect函数的具体用法?C++ bufferevent_socket_connect怎么用?C++ bufferevent_socket_connect使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了bufferevent_socket_connect函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: cbufferevent_socket_connect
//## int cbufferevent.socket_connect(Sockaddr_in sa);
static KMETHOD cbufferevent_socket_connect(KonohaContext *kctx, KonohaStack *sfp)
{
kcbufferevent *bev = (kcbufferevent *)sfp[0].asObject;
kSockaddr_in *sa = (kSockaddr_in *)sfp[1].asObject;
int ret = bufferevent_socket_connect(bev->bev, (struct sockaddr *)&sa->sockaddr, sizeof sa->sockaddr);
KReturnUnboxValue(ret);
}
开发者ID:wakamori,项目名称:aspen,代码行数:8,代码来源:Libevent_glue.c
示例2: InitConnectTo
void InitConnectTo(Server *pServer) {
struct sockaddr_in sa;
u32 ip;
inet_aton(pServer->host, &ip);
sa.sin_addr = *((struct in_addr *) & ip);
sa.sin_family = AF_INET;
sa.sin_port = htons(pServer->port);
bzero(&sa.sin_zero, 8);
gettimeofday(&tv, NULL);
printf("InitConnectTo() [time: %d]\n", tv.tv_sec);
pServer->poll->status = 1;
timerclear(&tv);
tv.tv_usec=pServer->timeout*1000*1000;
pServer->poll->bev = bufferevent_socket_new(pServer->evConfig.ev_base, -1, BEV_OPT_CLOSE_ON_FREE);
bufferevent_socket_connect(pServer->poll->bev ,(struct sockaddr *)&sa, sizeof(sa));
bufferevent_setcb(pServer->poll->bev, OnBufferedRead, OnBufferedWrite, OnBufferedError, pServer);
bufferevent_enable(pServer->poll->bev, EV_READ|EV_WRITE |EV_TIMEOUT);
bufferevent_set_timeouts(pServer->poll->bev, &tv, &tv);
}
开发者ID:kalloc,项目名称:tester,代码行数:26,代码来源:tester_3.c
示例3: bufferevent_connect_getaddrinfo_cb
static void
bufferevent_connect_getaddrinfo_cb(int result, struct evutil_addrinfo *ai,
void *arg)
{
struct bufferevent *bev = arg;
struct bufferevent_private *bev_p =
EVUTIL_UPCAST(bev, struct bufferevent_private, bev);
int r;
BEV_LOCK(bev);
bufferevent_unsuspend_write_(bev, BEV_SUSPEND_LOOKUP);
bufferevent_unsuspend_read_(bev, BEV_SUSPEND_LOOKUP);
if (result != 0) {
bev_p->dns_error = result;
bufferevent_run_eventcb_(bev, BEV_EVENT_ERROR);
bufferevent_decref_and_unlock_(bev);
if (ai)
evutil_freeaddrinfo(ai);
return;
}
/* XXX use the other addrinfos? */
/* XXX use this return value */
r = bufferevent_socket_connect(bev, ai->ai_addr, (int)ai->ai_addrlen);
(void)r;
bufferevent_decref_and_unlock_(bev);
evutil_freeaddrinfo(ai);
}
开发者ID:NeilHappy,项目名称:libevent,代码行数:29,代码来源:bufferevent_sock.c
示例4: lock
int BotMonitor::connect(const InetAddr& serverAddr)
{
MutexLockConditionGuard lock(this->m_mutex, this->threadType() == TT_multi_thread);
for (int i = BOT_DATA->m_nAccountIndex; //
i < BOT_DATA->m_nAccountIndex + BOT_DATA->m_nBotAmout; ++i)
{
BotConnection *conn = new BotConnection();
conn->init(i, this, true);
bufferevent_socket_connect(conn->bevent(),//
(struct sockaddr *)&serverAddr.addr_,//
sizeof(serverAddr.addr_));
std::string strIndex = convert<std::string>(i);
std::string strAccount = BOT_DATA->m_strAccountPre + strIndex + "&";
this->m_connMap.insert(std::make_pair(i, conn));
GameBot* bot = new GameBot(i, strAccount);
this->m_botMap.insert(std::make_pair(i, bot));
int hz = BOT_DATA->m_nConnectHz > 0 ? BOT_DATA->m_nConnectHz : 10;
usleep(1000000 / hz);
}
return 0;
}
开发者ID:lntoly,项目名称:GameServer,代码行数:25,代码来源:BotMonitor.cpp
示例5: NsqLogPrintf
void CTcpHandler::TcpConnect(CCommand *pCmd)
{
NsqLogPrintf(LOG_DEBUG, "TcpConnect\n");
CTcpConnectCommand *pConnectCmd = dynamic_cast<CTcpConnectCommand *>(pCmd);
m_strHost = pConnectCmd->m_strHost;
m_iPort = pConnectCmd->m_iPort;
sockaddr_in sAddr;
memset(&sAddr, 0, sizeof(sockaddr_in));
sAddr.sin_addr.s_addr = inet_addr(pConnectCmd->m_strHost.c_str());
sAddr.sin_port = htons(pConnectCmd->m_iPort);
sAddr.sin_family = AF_INET;
CNetThread *pThread = dynamic_cast<CNetThread *>(GetThread());
m_pBufevt = bufferevent_socket_new(pThread->GetEventBase(), -1, BEV_OPT_THREADSAFE);
int32_t iRet = bufferevent_socket_connect(m_pBufevt, (sockaddr*)&sAddr, sizeof(sockaddr_in));
if (iRet != 0)
{
OnError(errno);
return ;
}
bufferevent_setcb(m_pBufevt, CNetThread::OnStaticRead, CNetThread::OnStaticWrite, CNetThread::OnStaticError, this);
bufferevent_enable(m_pBufevt, EV_READ|EV_PERSIST|EV_ET);
//设置读入最低水位,防止无效回调
bufferevent_setwatermark(m_pBufevt, EV_READ,
OnRead(NULL, 0), 0);
SetTimeout();
}
开发者ID:EastQ,项目名称:libnsq,代码行数:31,代码来源:tcp_handler.cpp
示例6: bufferevent_connect_getaddrinfo_cb
static void
bufferevent_connect_getaddrinfo_cb(int result, struct evutil_addrinfo *ai,
void *arg)
{
struct bufferevent *bev = arg;
int r;
BEV_LOCK(bev);
bufferevent_unsuspend_write(bev, BEV_SUSPEND_LOOKUP);
bufferevent_unsuspend_read(bev, BEV_SUSPEND_LOOKUP);
if (result != 0) {
/* XXX Communicate the error somehow. */
_bufferevent_run_eventcb(bev, BEV_EVENT_ERROR);
_bufferevent_decref_and_unlock(bev);
if (ai)
evutil_freeaddrinfo(ai);
return;
}
/* XXX use the other addrinfos? */
r = bufferevent_socket_connect(bev, ai->ai_addr, ai->ai_addrlen);
_bufferevent_decref_and_unlock(bev);
evutil_freeaddrinfo(ai);
}
开发者ID:enlight,项目名称:Libevent,代码行数:25,代码来源:bufferevent_sock.c
示例7: main
int main(int argc, char** argv)
{
if(argc < 3)
{
printf("please input 2 parameter\n");
return -1;
}
struct event_base* base = event_base_new();
struct bufferevent* bev = bufferevent_socket_new(base,-1,
BEV_OPT_CLOSE_ON_FREE);
struct event* ev_cmd = event_new(base,STDIN_FILENO,
EV_READ|EV_PERSIST,
cmd_msg_cb,(void*)bev);
event_add(ev_cmd,NULL);
struct sockaddr_in server_addr;
memset(&server_addr,0,sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(atoi(argv[2]));
inet_aton(argv[1],&server_addr.sin_addr);
bufferevent_socket_connect(bev,(struct sockaddr*)&server_addr,
sizeof(server_addr));
bufferevent_setcb(bev,server_msg_cb,NULL,event_cb,(void*)ev_cmd);
bufferevent_enable(bev,EV_READ|EV_PERSIST);
printf("finished\n");
return 0;
}
开发者ID:edwardL,项目名称:edward,代码行数:28,代码来源:3c.c
示例8: bufferevent_free
// return 0 if there is valid bufferevent
int CBinaryWriter::connect(){
int ret;
if( state == CONNECTING || state == CONNECTED ){
ret = 0;
goto ret;
}
if( be != NULL ){
bufferevent_free(be);
be = NULL;
}
be = bufferevent_socket_new((struct event_base *)base, -1, 0);
if( bufferevent_disable (be, EV_READ) ){
goto error;
}
bufferevent_setcb(be, NULL, NULL, event_cb, this);
if( bufferevent_socket_connect(be, addr, addr_len) ){
goto error;
}
ret = 0;
state = CONNECTING;
ret:
return ret;
error:
ret = -1;
if( be != NULL ){
bufferevent_free(be);
be = NULL;
}
goto ret;
}
开发者ID:artemg,项目名称:toolzlib,代码行数:32,代码来源:binary_writer.cpp
示例9: event_base_new
void Conn::run()
{
if(conn_type & CONN_TYPE_LISTENER)
{
this->pEvbase = event_base_new();
struct evconnlistener* pEvConn = evconnlistener_new_bind(this->pEvbase,
OnConnListenerCb,
(void*)this,
LEV_OPT_CLOSE_ON_FREE | LEV_OPT_REUSEABLE,
-1,
(struct sockaddr*)&sAddrIn,
sizeof(struct sockaddr_in));
if(!pEvConn)
{
LOG_DEBUG("server on " << addr << ":" << ntohs(sAddrIn.sin_port) << " fail");
return;
}
LOG_DEBUG("server on " << addr << ":" << ntohs(sAddrIn.sin_port));
evconnlistener_set_error_cb(pEvConn, OnConnListenerErrCb);
event_base_dispatch(this->pEvbase);
return;
}
if(conn_type & CONN_TYPE_CONNECTER)
{
this->pEvbase = event_base_new();
this->pConnEvBuf = bufferevent_socket_new(this->pEvbase, -1, BEV_OPT_CLOSE_ON_FREE);
bufferevent_setcb(this->pConnEvBuf, OnReadCbAddr, NULL, OnConnEventCb, (void*)this);
if(bufferevent_socket_connect(this->pConnEvBuf, (struct sockaddr*)&sAddrIn, sizeof(struct sockaddr_in)) != 0)
{
LOG_DEBUG("conn on " << addr << ":" << ntohs(sAddrIn.sin_port) << " fail");
bufferevent_free(this->pConnEvBuf);
return;
}
LOG_DEBUG("conn on " << addr << ":" << ntohs(sAddrIn.sin_port));
struct event* pEvent = NULL;
evutil_socket_t fd = bufferevent_getfd(this->pConnEvBuf);
if(fd != -1 && OnTimingCbAddr != NULL)
{
pEvent = event_new(this->pEvbase, fd, EV_PERSIST, OnTimingEventCb, (void*)this);
event_add(pEvent, &this->tv);
}
bufferevent_enable(this->pConnEvBuf, EV_READ);
event_base_dispatch(this->pEvbase);
if(fd != -1 && OnTimingCbAddr != NULL)
{
event_del(pEvent);
}
return;
}
}
开发者ID:github188,项目名称:FastSrv,代码行数:60,代码来源:net.cpp
示例10: connectToServer
void connectToServer(const char *address, const char *port,
EventHandler *pProcessor) {
sockaddr_in sin = { 0 };
sin.sin_family = AF_INET;
sin.sin_port = htons(atoi(port));
inet_pton(AF_INET, address, &(sin.sin_addr));
// Investigate: set reuse address and make socket nonblocking?
bufferevent *bev = bufferevent_socket_new(m_ebase, -1,
BEV_OPT_CLOSE_ON_FREE);
bufferevent_setcb(bev, readfn, NULL, errorfn, (void*) pProcessor);
pProcessor->setContext((Context*) bev);
setParent(pProcessor);
if (bufferevent_socket_connect(bev, (struct sockaddr *) &sin,
sizeof(sin)) < 0) {
ERROR_OUT("Cannot bind to port %s", port);
/* Error starting connection */
bufferevent_free(bev);
exit(1);
}
}
开发者ID:ahsank,项目名称:EvaluateIPC,代码行数:25,代码来源:eventserver.cpp
示例11: Disconnect
bool TorControlConnection::Connect(const std::string &target, const ConnectionCB& _connected, const ConnectionCB& _disconnected)
{
if (b_conn)
Disconnect();
// Parse target address:port
struct sockaddr_storage connect_to_addr;
int connect_to_addrlen = sizeof(connect_to_addr);
if (evutil_parse_sockaddr_port(target.c_str(),
(struct sockaddr*)&connect_to_addr, &connect_to_addrlen)<0) {
LogPrintf("tor: Error parsing socket address %s\n", target);
return false;
}
// Create a new socket, set up callbacks and enable notification bits
b_conn = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);
if (!b_conn)
return false;
bufferevent_setcb(b_conn, TorControlConnection::readcb, NULL, TorControlConnection::eventcb, this);
bufferevent_enable(b_conn, EV_READ|EV_WRITE);
this->connected = _connected;
this->disconnected = _disconnected;
// Finally, connect to target
if (bufferevent_socket_connect(b_conn, (struct sockaddr*)&connect_to_addr, connect_to_addrlen) < 0) {
LogPrintf("tor: Error connecting to address %s\n", target);
return false;
}
return true;
}
开发者ID:Michagogo,项目名称:bitcoin,代码行数:29,代码来源:torcontrol.cpp
示例12: main
int main(int argc, char **argv)
{
struct sockaddr_in serv_addr;
struct event_base *base;
struct bufferevent *bev, *bev_stdout;
int i, addr_len = sizeof serv_addr;
struct timeval timeout = {1, 0};
base = event_base_new();
if (evutil_parse_sockaddr_port("127.0.0.1:8200", (struct sockaddr *)&serv_addr, &addr_len)) {
printf("evutil_parse_sockaddr_port");
exit(1);
}
for (i = 0; i < 10; i++) {
bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);
bufferevent_setcb(bev, readcb, writecb, eventcb, NULL);
bufferevent_enable(bev, EV_READ | EV_WRITE);
bufferevent_set_timeouts(bev, &timeout, &timeout);
evbuffer_add_printf(bufferevent_get_output(bev), websocket_request);
if (bufferevent_socket_connect(bev, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
bufferevent_free(bev);
printf("bufferevent_socket_connect");
exit(1);
}
}
event_base_dispatch(base);
}
开发者ID:wangchuan3533,项目名称:learning,代码行数:32,代码来源:client_async.c
示例13: connect_by_ipport
bufferevent * connect_by_ipport(const char * ip_port)
{
bufferevent * bev =NULL;
do
{
struct sockaddr saddr;
int saddr_len =sizeof(saddr);
if(0!=evutil_parse_sockaddr_port(ip_port, &saddr, &saddr_len))
{
printf("evutil_parse_sockaddr_port failed! \n");
break;
}
bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);
int rt =bufferevent_socket_connect(bev,(struct sockaddr *)&saddr, sizeof(saddr));
if ( rt!= 0) {
bufferevent_free(bev);
break;
}
bufferevent_setcb(bev, readcb, writecb, eventcb, NULL);
bufferevent_enable(bev, EV_READ|EV_WRITE);
} while (0);
return bev;
}
开发者ID:dungeonsnd,项目名称:test-code,代码行数:25,代码来源:client.cpp
示例14: go_connecting
static void go_connecting(int fd, short what, void *arg)
{
CONNECTOR *cr = (CONNECTOR *)arg;
bufferevent_socket_connect(cr->bev, cr->sa, cr->socklen);
PUTS("bufferevent_socket_connect %s", __FUNCTION__);
}
开发者ID:anhuiwm,项目名称:niuniu_master,代码行数:7,代码来源:connector.cpp
示例15: bzero
/**
* Redisサーバへ接続
*
* @access public
* @return bool
*/
bool rediscli::connection() {
struct sockaddr *address;
int length;
if (port >= 1 && port <= 65535) {
struct sockaddr_in sin;
bzero(&sin, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = inet_addr(listen.c_str());
sin.sin_port = htons(port);
address = (struct sockaddr *)&sin;
length = sizeof(sin);
} else {
struct sockaddr_un sun;
bzero(&sun, sizeof(sun));
sun.sun_family = AF_LOCAL;
strcpy(sun.sun_path, listen.c_str());
address = (struct sockaddr *)&sun;
length = sizeof(sun);
}
if (bufferevent_socket_connect(bev, address, length) < 0) {
log::error("Could not connect a redis server!");
return false;
}
return true;
}
开发者ID:Yujiro3,项目名称:exchanger,代码行数:37,代码来源:mem_rediscli.cpp
示例16: accept_cb
static void accept_cb(struct evconnlistener *listener, evutil_socket_t fd,
struct sockaddr *a, int slen, void *p)
{
struct bufferevent *b_out, *b_in;
b_in = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE|BEV_OPT_DEFER_CALLBACKS);
b_out = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE|BEV_OPT_DEFER_CALLBACKS);
if(!(b_in && b_out))
{
printf("bufferevent_sock_new Error\n");
exit(1);
}
if (bufferevent_socket_connect(b_out, (struct sockaddr*)&client_addr, client_addrlen)<0) {
perror("bufferevent_socket_connect");
bufferevent_free(b_out);
bufferevent_free(b_in);
return;
}
bufferevent_setcb(b_in, readcb, NULL, NULL, b_out);
bufferevent_setcb(b_out, readcb, NULL, NULL, b_in);
bufferevent_enable(b_in, EV_READ|EV_WRITE);
bufferevent_enable(b_out, EV_READ|EV_WRITE);
}
开发者ID:KimgyeongMin,项目名称:homework,代码行数:27,代码来源:proxy.c
示例17: 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 enbaled by default, so the underlying evbuffer writecb will be called when dispatch.
* evbuffer writecb FOUND that there is no data to be sent, return.
* evbuffer writecb is not persisted. (If persisted, evbuffer writecb will be called again and agian, see event_write
* So there is no pending event in base, base will exit.
*/
bufferevent_setcb(p_event, NULL, event_output, buff_ev_cb, p_base);
/* write data to evbuffer, So when evbuffer cb FOUND there is data, send it out.
* And, call the bufferevent cb based on water mark.
*/
bufferevent_write (p_event, "nisssssssssdssssssssa", 20);
/*
* normally, If evbuffer cb send data, FOUND that : the left data len is < 10, then bufferevent writecb
* will be invoked to tell ME.
* hey, there almost no data!!
*/
bufferevent_setwatermark(p_event, EV_WRITE, 10, -1);
sleep (10);
event_base_dispatch(p_base);
return 0;
}
开发者ID:dong777,项目名称:libevent_sample,代码行数:59,代码来源:write_watermark_test.c
示例18: accept_cb
static void
accept_cb(struct evconnlistener *listener, evutil_socket_t fd,
struct sockaddr *a, int slen, void *p)
{
/* Extract and display the address we're connect. */
struct sockaddr_storage ss;
ev_socklen_t socklen = sizeof(ss);
char addrbuf[128];
void *inaddr;
const char *addr;
int got_port = -1;
memset(&ss, 0, sizeof(ss));
if (getpeername(fd, (struct sockaddr *)&ss, &socklen)) {
perror("getpeerkname() failed");
return ;
}
if (ss.ss_family == AF_INET) {
got_port = ntohs(((struct sockaddr_in*)&ss)->sin_port);
inaddr = &((struct sockaddr_in*)&ss)->sin_addr;
} else if (ss.ss_family == AF_INET6) {
got_port = ntohs(((struct sockaddr_in6*)&ss)->sin6_port);
inaddr = &((struct sockaddr_in6*)&ss)->sin6_addr;
} else {
fprintf(stderr, "Weird address family %d\n",
ss.ss_family);
return;
}
addr = evutil_inet_ntop(ss.ss_family, inaddr, addrbuf, sizeof(addrbuf));
if (addr) {
printf("connection from address %s:%d\n", addr, got_port);
} else {
fprintf(stderr, "evutil_inet_ntop failed\n");
return ;
}
struct bufferevent *b_out, *b_in;
/* Create two linked bufferevent objects: one to connect, one for the
* new connection */
b_in = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE|BEV_OPT_DEFER_CALLBACKS);
b_out = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE|BEV_OPT_DEFER_CALLBACKS);
assert(b_in && b_out);
if (bufferevent_socket_connect(b_out, (struct sockaddr*)&connect_to_addr, connect_to_addrlen) < 0)
{
perror("bufferevent_socket_connect");
bufferevent_free(b_out);
bufferevent_free(b_in);
return;
}
bufferevent_setcb(b_in, readcbin, NULL, eventcbin, b_out);
bufferevent_setcb(b_out, readcbout, NULL, eventcbout, b_in);
bufferevent_enable(b_in, EV_READ|EV_WRITE);
bufferevent_enable(b_out, EV_READ|EV_WRITE);
}
开发者ID:hzsunzixiang,项目名称:programming,代码行数:58,代码来源:proxy2.c
示例19: conn_connect_bufferevent
int
conn_connect_bufferevent(struct bufferevent *bev, struct evdns_base *dns,
int family, const char *name, int port,
conn_connectcb conncb, void *arg)
{
struct conninfo *info;
int rv = -1;
info = mem_calloc(1, sizeof(*info));
info->bev = bev;
info->on_connect = conncb;
info->cbarg = arg;
info->connecting = 1;
info->socks = use_socks;
bufferevent_setcb(bev, conn_readcb, NULL, conn_errorcb, info);
if (use_socks != SOCKS_NONE) {
info->host = mem_strdup(name);
info->port = port;
if (use_socks == SOCKS_4a) {
rv = bufferevent_socket_connect(bev,
(struct sockaddr*)&socks_addr,
socks_addr_len);
return rv;
}
#ifndef DISABLE_DIRECT_CONNECTIONS
else {
struct evutil_addrinfo hint;
char portstr[NI_MAXSERV];
evutil_snprintf(portstr, sizeof(portstr), "%d", port);
memset(&hint, 0, sizeof(hint));
hint.ai_family = AF_INET;
hint.ai_protocol = IPPROTO_TCP;
hint.ai_socktype = SOCK_STREAM;
evdns_getaddrinfo(dns, name, portstr, &hint,
socks_resolvecb, info);
return 0;
}
#endif
}
#ifdef DISABLE_DIRECT_CONNECTIONS
{
const char *msg;
msg = "Direct connections disabled, but I have no SOCKS 4a "
"proxy to connect to!";
log_error("conn: %s", msg);
finish_connection(info, 0, msg);
}
#else
rv = bufferevent_socket_connect_hostname(bev, dns, family, name, port);
#endif
return rv;
}
开发者ID:0xffea,项目名称:shim,代码行数:57,代码来源:conn.c
示例20: test_bufferevent_connect
static void
test_bufferevent_connect(void *arg)
{
struct basic_test_data *data = arg;
struct evconnlistener *lev=NULL;
struct bufferevent *bev1=NULL, *bev2=NULL;
struct sockaddr_in localhost;
struct sockaddr *sa = (struct sockaddr*)&localhost;
memset(&localhost, 0, sizeof(localhost));
localhost.sin_port = htons(27015);
localhost.sin_addr.s_addr = htonl(0x7f000001L);
localhost.sin_family = AF_INET;
lev = evconnlistener_new_bind(data->base, listen_cb, data->base,
LEV_OPT_CLOSE_ON_FREE|LEV_OPT_REUSEABLE,
16, sa, sizeof(localhost));
tt_assert(lev);
tt_assert(!evconnlistener_enable(lev));
bev1 = bufferevent_socket_new(data->base, -1, BEV_OPT_CLOSE_ON_FREE);
bev2 = bufferevent_socket_new(data->base, -1, BEV_OPT_CLOSE_ON_FREE);
bufferevent_setcb(bev1, NULL, NULL, reader_eventcb, data->base);
bufferevent_setcb(bev2, NULL, NULL, reader_eventcb, data->base);
tt_want(!bufferevent_socket_connect(bev1, sa, sizeof(localhost)));
tt_want(!bufferevent_socket_connect(bev2, sa, sizeof(localhost)));
bufferevent_enable(bev1, EV_READ);
bufferevent_enable(bev2, EV_READ);
event_base_dispatch(data->base);
tt_int_op(n_strings_read, ==, 2);
end:
if (lev)
evconnlistener_free(lev);
if (bev1)
bufferevent_free(bev1);
if (bev2)
bufferevent_free(bev2);
}
开发者ID:kjg,项目名称:libevent,代码行数:44,代码来源:regress_bufferevent.c
注:本文中的bufferevent_socket_connect函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论