poll的優點
1)poll() 不要求開發者計算最大檔案描述符加一的大小。
2)poll() 在應付大數目的檔案描述符的時候速度更快,相比於select。
3)它沒有最大連線數的限制,原因是它是基於鍊錶來儲存的。
poll的缺點
1)大量的fd的陣列被整體複製於使用者態和核心位址空間之間,而不管這樣的複製是不是有意義。
2)與select一樣,poll返回後,需要輪詢pollfd來獲取就緒的描述符。
#include#include#include#include#include#include#include#include#include#define pollfd_size 1024
struct pollfd array_fd[pollfd_size];
void pd_action(int index)
else
}else if(array_fd[index].revents & pollout)
}int startup(const char *_ip,int _port)
int opt = 1;
setsockopt(sock,sol_socket,so_reuseaddr,&opt,sizeof(opt));
struct sockaddr_in local;
local.sin_family = af_inet;
local.sin_addr.s_addr = inet_addr(_ip);
local.sin_port = htons(_port);
if(bind(sock,(struct sockaddr*)&local,sizeof(local)) < 0)
if(listen(sock,10) < 0)
return sock;
}static void usage(const char *proc)
int main(int argc,char *argv)
int listen_sock = startup(argv[1],atoi(argv[2]));
array_fd[0].fd = listen_sock;
int i = 0;
for(;i < pollfd_size;i++)
int timeout = -1;
while(1)else
}if(k == pollfd_size)
}}else if(j != 0)else}}
break;
} }close(listen_sock);
return 0;
}
IO多路復用之poll
poll和select區別 poll伺服器監視的檔案描述符無上限 poll將輸入 輸出引數進行分離。一 poll函式 函式格式如下所示 include int poll struct pollfd fds,unsigned int nfds,int timeout 不同與select使用三個點陣圖來...
I O多路復用之poll
回憶一下 select介面 intselect int nfds,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout select需要我們指定檔案描述符的最大值,然後取 0,nfds 這個範圍內的值檢視是在集合...
I O多路復用之poll
poll函式和select函式非常相似,但是函式介面不一樣。include int poll struct pollfd fdarray,unsigned long nfds,int timeout 返回 就緒描述字的個數,0 超時,1 出錯 第乙個引數是指向乙個結構陣列第乙個元素的指標。每個陣列元...