linux下C++ socket网络编程(11)

// 参数enable_et表示是否启用ET模式 , 如果为True则启用 , 否则使用LT模式

static void addfd( int epollfd int fd bool enable_et )

{

struct epoll_event ev;

ev.data.fd = fd;

ev.events = EPOLLIN;

if( enable_et )

ev.events = EPOLLIN | EPOLLET;

epoll_ctl(epollfd EPOLL_CTL_ADD fd &ev);

// 设置socket为非阻塞模式

// 套接字立刻返回 , 不管I/O是否完成 , 该函数所在的线程会继续运行

//eg. 在recv(fd...)时 , 该函数立刻返回 , 在返回时 , 内核数据还没准备好会返回WSAEWOULDBLOCK错误代码

fcntl(fd F_SETFL fcntl(fd F_GETFD 0)| O_NONBLOCK);

推荐阅读