Select 網路模型

2021-10-12 17:56:21 字數 2792 閱讀 1216

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請求連線後把該...