簡單的使用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...