1:select內部是個陣列,而epoll內部結構是紅黑二叉樹
2:select查詢起來慢,而epoll查詢起來快
3:每次迴圈,內部都要發生拷貝(檢視相關**)而epoll不需要這樣的操作,也就是初始化一次拷貝
#include
#include
#include
#include
#include
int main()
socket socket_fd = socket(af_inet, sock_stream, 0);
sockaddr_in add_ress;
add_ress.sin_family = af_inet;
add_ress.sin_port = htons(8080); //繫結埠號
add_ress.sin_addr.s_un.s_addr = htonl(inaddr_any); //能夠接受任意ip位址訊息
bind(socket_fd, (sockaddr*)&add_ress, sizeof(add_ress));
listen(socket_fd, 5);在這裡插入**片
fd_set read_fd;
fd_set temp_fd;
fd_zero(&read_fd);
fd_zero(&temp_fd);
fd_set(socket_fd, &read_fd);
timeval tv;//設定超時等待時間
tv.tv_sec = 1;
tv.tv_usec = 0;
std::size_t max_fd = socket_fd;
while (1)
//如果socket_fd在temp_fd集合內,說有事件來了
if (fd_isset(socket_fd, &temp_fd)) );
if (fd != clients.end())
}else ;
int bytes = recv(clients[i], buffer, 100, 0);
if (bytes == -1)
if (bytes == 0) );
if (fd == clients.end())
else
continue;
}else }}}}}
Select函式說明
select在 socket 程式設計中還是比較重要的,可是對於初學 socket 的人來說都不太愛用 select 寫程式,他們只是習慣寫諸如 connect accept recv 或recvfrom 這樣的阻塞程式 所謂阻塞方式 block 顧名思義,就是程序或是執行緒執行到這些函式時必須等 ...
C Linq中的Select方法的說明
enumerable.range 0,20 select i console.writeline i 計算完成 return x 當你嘗試執行上面的 會發現並沒有輸出,這是為什麼呢?意思就是它只是儲存了乙個操作,相當於儲存了乙個委託,只有在列舉時才執行委託。即 將結果tolist時就會產生輸出,因為...
位運算的列子
去掉最後一位 101101 10110 x 1 在最後加乙個0 101101 1011010 x 1 在最後加乙個1 101101 1011011 x 1 1 把最後一位變成1 101100 101101 x 1 把最後一位變成0 101101 101100 x 1 1 最後一位取反 101101 ...