I O多路復用之poll

2021-08-02 14:14:50 字數 1324 閱讀 6735

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 出錯 第乙個引數是指向乙個結構陣列第乙個元素的指標。每個陣列元...