Linux網路程式設計select模型的實現

2021-07-26 18:39:19 字數 2066 閱讀 8729



簡單的使用linux下的select模型實現了乙個http的server

"屌絲逆襲季

";fd_set fds;

void echo_srv(int clientfd)

//處理使用者請求資料

char line[max_line];

printf( "開始讀取資料");

int n = read(clientfd, line, sizeof(line));

if(n < 0)

//#define econnreset 104  /* connection reset by peer */

if(errno == econnreset)

close(clientfd);

fd_clr(clientfd, &fds);

printf("異常退出\n");

else

printf("網路異常");

exit(-1);

else if(n == 0)

close(clientfd);

fd_clr(clientfd, &fds);

printf("正常退出\n");

else

line[n] = 0;

printf("接收到資料:%s\n", line);

write(clientfd, szhtmlbuf, sizeof(szhtmlbuf));

int main()

struct sockaddr_in cliaddr, servaddr;

int listenfd = socket(af_inet, sock_stream, 0);

if( listenfd < 0)

printf("socket函式執行失敗");

return 1;

servaddr.sin_family = af_inet;

servaddr.sin_addr.s_addr = htonl(inaddr_any);

//inet_aton('10.132.10.64', &(servaddr.sin_addr));

= inet_addr("10.132.10.64");

servaddr.sin_port = htons(serv_port);

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

printf("bind函式執行失敗");

return 1;

if(listen(listenfd, listenq) < 0)

printf("listen函式執行失敗");

return 1;

printf("listen函式執行成功\n");

//select 部分

int maxfd;

fd_zero(&fds);

dowhile(true);

return 0;

linux 網路程式設計 select

include include include include include include include include include include include include typedef struct st fd def 將fd接收套接字描述符放入到fd陣列中 int add f...

Linux網路程式設計之select

使用select多路復用技術的非阻塞模型 select多路復用通常具有很好的跨平台性,也能提供不錯的併發效能,但是在通常情況下有最大監聽檔案描述符的限制 通常1024 如果不需要達到c10k這種前端高效能伺服器的要求,採用select nonblocking的方式能降低程式設計的難度 用到的介面 f...

Linux網路程式設計 select函式詳解

作用 select函式是用來監視乙個或多個檔案控制代碼的狀態變化的,可阻塞也可不阻塞。函式原型 int select int nfds,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout 函式引數意義 fd m...