網路程式設計 21 poll

2021-10-01 04:14:26 字數 2399 閱讀 8445

三、測試

理解 poll 函式

int

poll

(struct ploofd *fds,

unsigned

long nfds,

int timeout)

;

引數

返回值:

struct pollfd

struct pollfd
pollserver.c

#include

"common.h"

intmain

(int argc,

char

**ar**)

int listen_rt =

listen

(listenfd, listenq);if

(listen_rt <0)

int connfd;

struct sockaddr_in cliaddr;

socklen_t clilen =

sizeof

(cliaddr)

;char buf[maxline]

;// 初始化 pollfd 陣列

struct pollfd event_set[init_size]

; event_set[0]

.fd = listenfd;

event_set[0]

.events = pollrdnorm;

int i;

for(i =

1; i < init_size; i++

)int ready_number;

for(;;

)// revents:返回的感興趣的結果事件型別

// pollrdnorm:對應普通資料可讀

if(event_set[0]

.revents & pollrdnorm)

}// 連線太多

if(i == init_size)

// 當前若處理的是連線套接字,則上面 for 迴圈裡就已處理完畢,繼續迴圈監聽下乙個連線的到來if(

--ready_number <=0)

}// 遍歷 pollfd 結構體

for(i =

1; i < init_size; i++

)// revents:返回的感興趣的結果事件型別

// pollrdnorm:普通資料可讀 | pollerr:發生錯誤

// 感興趣的結果事件型別是普通資料可讀或發生了錯誤

if(event_set[i]

.revents &

(pollrdnorm | pollerr))}

else

if(n ==

0|| errno == econnreset)

else

// ready_number:就緒描述符個數

// 當 ready_number 減到小於等於 0 時,表示事件全都處理完了,break 跳出 for 迴圈,不用再費勁遍歷下去if(

--ready_number <=0)

}}}}

標頭檔案 common.h

#ifndef chap_21_common_h

#define chap_21_common_h

#include

#include

#include

#include

#include

/* basic socket definitions */

#include

/* sockaddr_in{} and other internet defns */

#include

/* inet(3) functions */

#include

#include

#include

#include

void

error

(int status,

int err,

char

*fmt,..

.);#define serv_port 43211

#define maxline 4096

#define listenq 1024

#define buffer_size 4096

#define init_size 128

#endif

//chap_21_common_h

通過 telnet 命令訪問服務端

telnet 127.0

.0.1

43211

網路程式設計 poll

寫下來,怕忘記了 server include include include include include include include include gettimeofday include struct in addr include inet aton include getpid i...

C 網路程式設計之poll

poll機制與select機制類似,通過管理檔案描述符來進行輪詢,效率更高,並且處理的連線個數不受核心的限制。include int poll struct pollfd fdarray,unsigned int nfds,int timeout 引數 1 fdarray 可讀套接字,是乙個指向陣列...

Linux網路程式設計 poll函式

作用 監視並等待多個檔案描述符的屬性變化。函式原型 int poll struct pollfd fds,nfds t nfds,int timeout 函式引數意義 fds 指向乙個結構體陣列的第0個元素的指標,每個陣列元素都是乙個struct pollfd結構,用於指定測試某個給定的fd的條件。...