IO多路復用 select模型

2021-07-06 09:05:56 字數 1124 閱讀 6902

客戶端**見:c/s通訊---伺服器阻塞型使用

伺服器端**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

int main()

//set local address

memset(&servaddr,0,sizeof(servaddr));

servaddr.sin_family = af_inet;

servaddr.sin_addr.s_addr = htonl(inaddr_any);

servaddr.sin_port = htons(8001);

//bind the local addr to socket

if(bind(socket_fd,(struct sockaddr*)&servaddr,sizeof(servaddr)) == -1)

//listen client

if(listen(socket_fd,5) == -1)

printf("伺服器已經啟動!\n");

fd_set fdset;

int accept_fd[4096]=;

while(1)

//fd_set fdread = fdset;

int ret = select(6,&fdset,0,0,0); //判斷集合中是否有時間發生,沒有時間發生的套接字將移出集合

if(ret > 0) //套接字有事件發生

;int len = recv(accept_fd[i],buff,4096,0);

if(len > 0)

}else}}

if(fd_isset(socket_fd,&fdset))

int j =0 ;

for(;j<4096;j++)

}if(j == 4096)}}

else if(ret == 0)

else

}close(socket_fd);

}

IO多路復用模型之Select

在unix c中,socket相關的函式操作都是阻塞式的,在單執行緒下服務端只能處理乙個客戶端請求。採用多執行緒處理客戶端請求,雖然能充分發揮多核cpu能力,但是在客戶端連線過多,併發度維持相對較高水平時,多執行緒引起執行緒的上下文切換將導致系統效率低下。select多路復用模型的核心思想,在單執行...

多路復用IO模型之select

多路i o復用表示支援多個任務同時對某一程序的i o程序操作,普通的read write只能實現同一時間操作乙個,無法實現網路通訊的併發操作。那麼多路復用i o分為三種機制 select poll epoll 1.占用記憶體多 2.程序 執行緒 切換時間多。3.程序 執行緒 之間同步麻煩 在主控執行...

IO多路復用 select

select系統呼叫的目的是 在一段指定時間內,監聽使用者感興趣的檔案描述符上的可讀 可寫和異常事件。poll和select應該被歸類為這樣的系統 呼叫,它們可以阻塞地同時探測一組支援非阻塞的io裝置,直至某乙個裝置觸發了事件或者超過了指定的等待時間 也就是說它們的職責不是做io,而是幫助 呼叫者尋...