I O非阻塞函式實踐 poll

2021-06-22 08:21:40 字數 1355 閱讀 1658

同樣先貼上改進**。

#include #include #include #include #include #include #include #include #include #include #define max_conn 	100

#define max_nu 10000

int main(int argc, char const *argv)

printf("socket success!\n");

if (setsockopt(fd, sol_socket, so_reuseaddr, &yes, sizeof(int)) == -1)

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

servaddr.sin_family = af_inet;

servaddr.sin_port = htons(12345);

servaddr.sin_addr.s_addr = htonl(inaddr_any);

if(bind(fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0)

printf("bind success!\n");

if (listen(fd, max_conn) < 0)

printf("listen success!\n");

struct pollfd clientfd[max_nu];

for (int i = 0; i < max_nu; ++i)

clientfd[i].fd = -1;

nfds = 1;//此處為結構體數量而非最大值

clientfd[0].fd = fd;

clientfd[0].events = pollin;

while(1)

count++;

nfds++;

clientfd[count].fd = accept_fd;

clientfd[count].events = pollin;

printf("recv connect ip=%s port=%d\n", inet_ntoa(cltaddr.sin_addr), ntohs(cltaddr.sin_port));

printf("count = %d\n", count);

if (count == max_nu)

} //此處不管已連線的套接詞是否有資料,所以只判斷監聽套接詞是否有資料變動

}//end switch

}//end while

return 0;

}//end main

測試了一下在這種條件下1w個請求沒問題。

阻塞I O,非阻塞I O

拿 socket舉例。當read資料時,如果這時沒有資料可讀,阻塞i o會一直等待有資料讀,資料從kernel copy 到socket的buffer後返回 非阻塞i o會立即返回,但如果有資料可讀,非阻塞i o也是等資料從kernel copy 到socket的buffer後返回。以上是阻塞與非阻...

非阻塞IO和阻塞IO

非阻塞io和阻塞io 在網路程式設計中對於乙個網路控制代碼會遇到阻塞io 和非阻塞io 的概念,這裡對於這兩種socket 先做一下說明 基本概念 阻塞io socket 的阻塞模式意味著必須要做完io 操作 包括錯誤 才會返回。非阻塞io 非阻塞模式下無論操作是否完成都會立刻返回,需要通過其他方式...

非阻塞IO和阻塞IO

非阻塞io 和阻塞io 在網路程式設計中對於乙個網路控制代碼會遇到阻塞io 和非阻塞io 的概念,這裡對於這兩種socket 先做一下說明 基本概念 阻塞io socket 的阻塞模式意味著必須要做完io 操作 包括錯誤 才會 返回。非阻塞io 非阻塞模式下無論操作是否完成都會立刻返回,需要通過其他...