#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define maxline 5
#define open_max 100
#define listenq 20
#define serv_port 5000
#define inftim 1000
void setnonblocking(int sock)
opts = opts|o_nonblock;
if(fcntl(sock,f_setfl,opts)<0)
}void closeanddisable(int sockid, epoll_event ee)
int main()
char *str = inet_ntoa(clientaddr.sin_addr);
cout << "accapt a connection from " << str << endl;
//設定用於讀操作的檔案描述符
setnonblocking(connfd);
ev.data.fd=connfd;
//設定用於注測的讀操作事件
ev.events=epollin | epollet;
//註冊ev
epoll_ctl(epfd,epoll_ctl_add,connfd,&ev);
}else if(events[i].events & epollin)//如果是已經連線的使用者,並且收到資料,那麼進行讀入。
else if (errno == econnreset)
else if (errno == eintr)
else
}else if( recvnum == 0)
// recvnum > 0
count += recvnum;
if ( recvnum == maxline)
else // 0 < recvnum < maxline
}if (breadok == true)
}else if(events[i].events & epollout) // 如果有資料傳送
else if(errno == econnreset)
else if (errno == eintr)
else
}if (writenlen == 0)
// 以下的情況是writenlen > 0
count += writenlen;
if (writenlen == maxline)
else // 0 < writenlen < maxline
}if (bwritten == true)}}
}return 0;
}
高併發網路程式設計之epoll詳解
核心 使用者空間記憶體拷貝問題,select需要複製大量的控制代碼資料結構,產生巨大的開銷 select返回的是含有整個控制代碼的陣列,應用程式需要遍歷整個陣列才能發現哪些控制代碼發生了事件 select的觸發方式是水平觸發,應用程式如果沒有完成對乙個已經就緒的檔案描述符進行io操作,那麼之後每次s...
高併發網路程式設計之epoll詳解
核心 使用者空間記憶體拷貝問題,select需要複製大量的控制代碼資料結構,產生巨大的開銷 select返回的是含有整個控制代碼的陣列,應用程式需要遍歷整個陣列才能發現哪些控制代碼發生了事件 select的觸發方式是水平觸發,應用程式如果沒有完成對乙個已經就緒的檔案描述符進行io操作,那麼之後每次s...
Linux網路程式設計之廣播
1.概念 前面介紹的tcp,udp都是單播方式,即一對一.而廣播是一台主機向區域網內的所有主機傳送資料。這時,同一網段的所有主機都能接收到資料。傳送廣播包的步驟大致如下 1 確定乙個傳送廣播的介面,如eth0 2 確定廣播的位址,通過ioctl函式,請求碼設定為siocgifbrdaddr得到廣播的...