[code]#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void client_cb(evutil_socket_t fd,short which,void *arg){ struct event *ev=(struct event*)arg; //判断超时 if(which&EV_TIMEOUT) { event_free(ev); evutil_closesocket(fd); printf(" TIme out\n"); } printf("client cb\n"); char buf[1024]={0}; int len = recv(fd,buf,sizeof(buf),0); if(len>0) printf("%s",buf); send(fd,"ok",2,0); if(len==0) { event_free(ev); evutil_closesocket(fd); printf(" close free\n"); }}void callback(evutil_socket_t fd,short which,void *arg){ struct sockaddr_in sin; //memset(&addr,0,sizeof(addr)); socklen_t len=sizeof(sin); evutil_socket_t cfd=accept(fd,(struct sockaddr *)&sin,&len); printf("accept\n"); struct event_base *base=(struct event_base*)arg; ///客户端数据读取事件 struct event *ev= event_new(base,cfd,EV_READ|EV_PERSIST,client_cb,event_self_cbarg()); if(!ev) { perror("event_new error"); exit(1); } struct timeval time_1={5,0}; event_add(ev,&time_1); printf("event_add\n");}int main(int argc,char *argv[]){ int i=0; int feature; struct event_config *evconfig=event_config_new(); struct event_base *base=event_base_new_with_config(evconfig); event_config_free(evconfig);//释放设置 if(!base) { perror("event base error"); exit(1); } if(signal(SIGPIPE,SIG_IGN)==SIG_ERR) return 1; // 获取当前网络模子 printf("current net methods:%s\n", event_base_get_method(base)); evutil_socket_t sock=socket(AF_INET,SOCK_STREAM,0); if(sock |