linux listen()

來源:互聯網
上載者:User

標籤:c   int   a   com   檔案   set   

listen(等待串連)
相關函數 socket,bind,accept,connect
表標頭檔 #include<sys/socket.h>
定義函數 int listen(int s,int backlog);
函數說明 listen()用來等待參數s 的socket連線。參數backlog指定同時能處
理的最大串連要求,如果串連數目達此上限則client端將收到
ECONNREFUSED的錯誤。Listen()並未開始接收連線,只是設定
socket為listen模式,真正接收client端連線的是accept()。通常
listen()會在socket(),bind()之後調用,接著才調用accept()。
傳回值 成功則返回0,失敗返回-1,錯誤原因存於errno
附加說明 listen()只適用SOCK_STREAM或SOCK_SEQPACKET的socket類型。如果socket為AF_INET則參數backlog 最大值可設至128。
錯誤碼 EBADF 參數sockfd非合法socket處理代碼
EACCESS 許可權不足
EOPNOTSUPP 指定的socket並未支援listen模式。

 

 

================================================================================

範例:

#include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<unistd.h> #define PORT 1234 #define MAXSOCKFD 10 main() { int sockfd,newsockfd,is_connected[MAXSOCKFD],fd; struct sockaddr_in addr; int addr_len = sizeof(struct sockaddr_in); fd_set readfds; char buffer[256]; char msg[ ] =”Welcome to server!”; if ((sockfd = socket(AF_INET,SOCK_STREAM,0))<0){ perror(“socket”); exit(1); } bzero(&addr,sizeof(addr)); addr.sin_family =AF_INET; addr.sin_port = htons(PORT); addr.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(sockfd,&addr,sizeof(addr))<0){ perror(“connect”); exit(1); } if(listen(sockfd,3)<0){ perror(“listen”); exit(1); } for(fd=0;fd<MAXSOCKFD;fd++) is_connected[fd]=0; while(1){ FD_ZERO(&readfds); FD_SET(sockfd,&readfds); for(fd=0;fd<MAXSOCKFD;fd++) if(is_connected[fd]) FD_SET(fd,&readfds); if(!select(MAXSOCKFD,&readfds,NULL,NULL,NULL))continue; for(fd=0;fd<MAXSOCKFD;fd++) if(FD_ISSET(fd,&readfds)){ if(sockfd = =fd){ if((newsockfd = accept (sockfd,&addr,&addr_len))<0) perror(“accept”); write(newsockfd,msg,sizeof(msg)); is_connected[newsockfd] =1; printf(“cnnect from %s\n”,inet_ntoa(addr.sin_addr)); }else{ bzero(buffer,sizeof(buffer)); if(read(fd,buffer,sizeof(buffer))<=0){ printf(“connect closed.\n”); is_connected[fd]=0; close(fd); }else printf(“%s”,buffer); } } } } 執行 $ ./listen connect from 127.0.0.1 hi I am client connected closed.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.