引入復用技術,可以減少程序數,無論連線多少客戶端,提供服務的程序只有乙個。
select函式可以實現io復用,它可以將多個檔案描述符集中到一起統一監視:
是否存在套接字接收資料?無需阻塞傳輸資料的套接字有哪些?哪些套接字發生了異常?
下面是具體用例:
//復用:時分復用;頻分復用
//使用select函式完成io復用
//1.設定檔案描述符;指定監視範圍;設定超時
//2.呼叫select函式
//3.檢視呼叫結果
#include #include #include #include #define buf_size 30
int main(void)
else if(result==0)
else
}}
return 0;
}
實現io復用的伺服器端:
//使用select函式實現io復用回聲伺服器
#include #include #include #include #include #include #include #include #define buf_size 30
void error_handling(char *message);
int main(int argc, char *argv)
//tcp socket
serv_sock=socket(pf_inet, sock_stream, 0);
if(serv_sock == -1)
error_handling("socket error!");
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = af_inet; //ipv4協議族
serv_addr.sin_addr.s_addr = htonl(inaddr_any); //主機位元組序(host)轉換成網路位元組序(net)(大端序)
serv_addr.sin_port = htons(atoi(argv[1])); //埠號
if(bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) == -1)
error_handling("bind error");
if(listen(serv_sock, 5) == -1)
error_handling("listen error");
fd_zero(&reads);
fd_set(serv_sock, &reads);
fd_max=serv_sock;
while(1)
else //讀取訊息
else}}
}}
close(serv_sock);
return 0;
}void error_handling(char *message)
《TCP IP網路程式設計》第十二章 I O復用
使用select函式 include include intselect int maxfd,fd set readset,fd set writeset,fd set exceptset,const struct timeval timeout maxfd 監視物件檔案描述符數量 readset ...
網路程式設計學習 IO復用 select poll
本文為unp第6章學習筆記 一,select函式 include int select int maxfd,fd set readset,fd set writeset,fd set exceptset,const struct timeval timeout 引數 maxfd select管理的最...
《網路程式設計》I O 多路復用
在前面的文章中介紹了五種 i o 模型 i o 模型 這裡介紹 i o 模型中 i o 多路復用在 tcp 套接字程式設計中的使用。在 i o 多路復用中主要是 select 和 poll 函式的使用。該函式允許程序指示核心等待多個事件中的任何乙個發生,並只在乙個或多個事件發生或超過指定時間後才被喚...