....
using namespace std;
void event_on_write(struct bufferevent *bev, void *arg){
cout<<"-------notic: data send ok"<<endl; //发送成功后回调
}
void event_on_connect(struct bufferevent *bev, short events, void *arg)
{
if (events & BEV_EVENT_CONNECTED) {
cout<<"---------have connected okay"<<endl;
bufferevent_write(bev, "hello", sizeof("hello")); //connect success and send data
} else if (events & BEV_EVENT_EOF) {
cout<<"Connection closed"<<endl;
bufferevent_free(bev);
struct event_base *base = (struct event_base *)arg;
event_base_loopbreak(base);
} else if (events & BEV_EVENT_ERROR) {
printf("Got an error on the connection: %s\n",strerror(errno));
bufferevent_free(bev);
struct event_base *base = (struct event_base *)arg;
event_base_loopbreak(base);
}
}
void event_on_read(struct bufferevent *bev, void *arg)
{
char buf[1024];
int n;
struct evbuffer * input = bufferevent_get_input(bev);
while((n=evbuffer_remove(input, buf, sizeof(buf)))>0){
fwrite(buf, 1, n, stdout); fflush(stdout); //recv data and print
}
}
int main(){
struct event_base *base = event_base_new();
struct bufferevent *bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);
文件描叙符可以设置为-1,只要稍后用bufferevent_setfd或者bufferevent_socket_connect()来设置它
//struct bufferevent *bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE|BEV_OPT_THREADSAFE);
struct sockaddr_in sin;
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
//sin.sin_addr.s_addr = inet_addr("127.0.0.1");//点分转换netlong//htonl(0x7f000001);
evutil_inet_pton(AF_INET, "127.0.0.1", &sin.sin_addr.s_addr);
sin.sin_port = htons(5001);
//connect server( event bind fd)
int connectfd = bufferevent_socket_connect(bev, (struct sockaddr*)&sin, sizeof(sin));
if( connectfd<0 ){
cout<<"=========connect failed==============="<<endl;
bufferevent_free(bev);
return -1 ;
}
//set callback func
bufferevent_setcb(bev, event_on_read, event_on_write, event_on_connect, base);
bufferevent_enable(bev, EV_READ | EV_WRITE); //bev support read and write
event_base_dispatch(base);
}