tcp 回射伺服器 客戶端非阻塞方式的實現

2021-10-12 20:16:27 字數 1285 閱讀 8839

檔名:nonblock_select.cpp

作用:使用select加上非阻塞的socket的伺服器端。

/* tcpcli01.c */

#include #include #include #include #include #include #include #include #include #include #include "common.h"

#include #include const int maxline = 4096;

void

str_cli(file *fp, int sockfd)

}else if(n == 0)

else

}if(fd_isset(sockfd,&rset))

}else if(n == 0)

}else

}if(fd_isset(stdout_fileno,&wset) && ((n=friptr-froptr) >0 ))

}else}}

if(fd_isset(sockfd,&wset) && ((n = toiptr -tooptr) > 0 ))

}else}}

}}int

main(int argc, char **ar**)

if((sockfd = socket(af_inet, sock_stream, 0)) < 0)

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = af_inet;

servaddr.sin_port = htons(9877);

if(inet_pton(af_inet, ar**[1], &servaddr.sin_addr) < 0)

if(connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)

str_cli(stdin, sockfd); /* do it all */

exit(0);

}

select 和 poll的是否阻塞和socket是否阻塞無關

select 和 poll 可以實現非同步通知,核心告訴我哪些檔案描述符可以寫可以讀,這個時候我們再去寫,再去讀。

阻塞的write就會影響其他的讀或寫,因為它會盡力把所有內容寫入。

而非阻塞write則是能寫多少寫多少,直接返回,不影響其他的讀或寫。然後下一次再根據select的結果再去write。

Socket實現「回射客戶端 伺服器」功能

tcp客戶 伺服器模型 伺服器端 回射客戶 伺服器應用程式 功能 客戶端輸入字元,傳送給伺服器,伺服器不對該字串做任何處理,又反回客戶端 伺服器端函式 include include include include includeint main struct sockaddr in servadd...

TCP 回射伺服器

tcp reflect server client tcp回射伺服器。學習了 unp 的第五章前面的知識,自己把 敲出來了,加深了理解吧。簡單地說就是,client傳送給server一條訊息 一行文字 server再將同樣地訊息傳送回client。就像這樣 用到的函式和api包括 1 socket ...

TCP 回射伺服器

本例為多程序的 tcp 回射程式 服務端 include intmain int argc,char ar close connfd 父程序斷開連線 void str echo int sockfd 套接字 sockaddr in cliaddr,servaddr 網際套接字位址結構,包含協議族 i...