maxfd 最大描述符加1
fd_set操作集合
#include
#include
#include
#include
intselect
(int maxfdp, fd_set *readset, fd_set *writeset, fd_set *exceptset,
struct timeval *timeout)
;
maxfdp:被監聽的檔案描述符的總數,它比所有檔案描述符集合中的檔案描述符的最大值大1,因為檔案描述符是從0開始計數的;
readfds、writefds、exceptset:分別指向可讀、可寫和異常等事件對應的描述符集合。
timeout:用於設定select函式的超時時間,即告訴核心select等待多長時間之後就放棄等待。timeout == null 表示等待無限長的時間
timeval結構體定義如下:
struct timeval
;
返回值:超時返回0;失敗返回-1;成功返回大於0的整數,這個整數表示就緒描述符的數目。
#include
intfd_zero
(int fd, fd_set *fdset)
;//乙個 fd_set型別變數的所有位都設為 0
intfd_clr
(int fd, fd_set *fdset)
;//清除某個位時可以使用
intfd_set
(int fd, fd_set *fd_set)
;//設定變數的某個位置位
intfd_isset
(int fd, fd_set *fdset)
;//測試某個位是否被置位
select使用範例:
當宣告了乙個檔案描述符集後,必須用fd_zero將所有位置零。之後將我們所感興趣的描述符所對應的位置位,操作如下:
fd_set rset;
int fd;
fd_zero(&rset);
fd_set(fd, &rset);
fd_set(stdin, &rset);
然後呼叫select函式,擁塞等待檔案描述符事件的到來;如果超過設定的時間,則不再等待,繼續往下執行。
select(fd+1, &rset, null, null,null);
select返回後,用fd_isset測試給定位是否置位:
if(fd_isset(fd, &rset)
select(maxfd+1, )
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define max_buffer_size 128
intmz_ipv4_tcp_create_socket()
if((ret =
setsockopt
(listenfd, sol_socket, so_reuseaddr,
&opt,
sizeof
(opt)))
<0)
bzero
(&server,
sizeof
(server));
server.sin_family = af_inet;
server.sin_port =
htons
(8888);
server.sin_addr.s_addr =
htonl
(inaddr_any);
len =
sizeof
(struct sockaddr);if
(bind
(listenfd,
(struct sockaddr *
)&server, len)
<0)
listen
(listenfd,10)
;return listenfd;
}int
main
(int argc,
char
*ar**)
//you wen jian miao shu fu ke du leif(
fd_isset
(listenfd,
&tmpfd)
)// shi fou you ke hu duan fa qi lian jie
} fd[i]
=accept
(listenfd,
(struct sockaddr *
)&clienaddr,
&len);if
(fd[i]==-
1)printf
("ip from:%s fd=%d\n"
,inet_ntoa
(clienaddr.sin_addr)
,fd[i]);
fd_set
(fd[i]
,&readfd);if
(maxfd else
else
if(ret ==0)
else
memset
(readbuf,0,
sizeof
(readbuf));
break;}
}}}}
Select網路模型
mysockt.h pragma once define maxnum 64 include pragma comment lib,ws2 32.lib define um user wm user 1 向視窗發訊息 enum nettype class cmysocket mysocket.cpp...
網路程式設計 select模型
select 機制中提供一fd set的資料結構,實際上是一long型別的陣列,每乙個陣列元素都能與一開啟的檔案控制代碼 不管是socket控制代碼,還是其他檔案或命名管道或裝置控制代碼 建立聯絡,建立聯絡的工作由程式設計師完成,當呼叫select 時,由核心根據io狀態修改fe set的內容,由此...
windows網路程式設計 select模型
select模型與一般模型的區別是selete模型使用fd set資料型別和select函式在核心裡維護一張存有連線上的socket表,使用select輪循處理這些socket,實現同時與多個socket連線。基本工作原理 建立socket,繫結,監聽,開個死迴圈,當發現有socket請求連線後把該...