<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 嵌入式Linux網(wǎng)絡編程之:網(wǎng)絡高級編程

          嵌入式Linux網(wǎng)絡編程之:網(wǎng)絡高級編程

          作者: 時間:2013-09-13 來源:網(wǎng)絡 收藏

          本文引用地址:http://www.ex-cimer.com/article/257115.htm

          2.()

          使用()函數(shù)雖然可以實現(xiàn)非阻塞I/O或信號驅動I/O,但在實際使用時往往會對資源是否準備完畢進行循環(huán)測試,這樣就大大增加了不必要的CPU資源的占用。在這里可以使用()函數(shù)來解決這個問題,同時,使用()函數(shù)還可以設置等待的時間,可以說功能更加強大。下面是使用select()函數(shù)的服務器端源代碼??蛻舳顺绦蚧旧吓c10.2.3小節(jié)中的例子相同,僅加入一行sleep()函數(shù),使得客戶端進程等待幾秒鐘才結束。

          /*net_select.c*/

          #includesys/types.h>

          #includesys/socket.h>

          #includestdio.h>

          #includestdlib.h>

          #includestring.h>

          #includesys/time.h>

          #includesys/ioctl.h>

          #includeunistd.h>

          #includenetinet/in.h>

          #definePORT4321

          #defineMAX_QUE_CONN_NM5

          #defineMAX_SOCK_FDFD_SETSIZE

          #defineBUFFER_SIZE1024

          intmain()

          {

          structsockaddr_inserver_sockaddr,client_sockaddr;

          intsin_size,count;

          fd_setinset,tmp_inset;

          intsockfd,client_fd,fd;

          charbuf[BUFFER_SIZE];

          if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)

          {

          perror(socket);

          exit(1);

          }

          server_sockaddr.sin_family=AF_INET;

          server_sockaddr.sin_port=htons(PORT);

          server_sockaddr.sin_addr.s_addr=INADDR_ANY;

          bzero((server_sockaddr.sin_zero),8);

          inti=1;/*允許重復使用本地地址與套接字進行綁定*/

          setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,i,sizeof(i));

          if(bind(sockfd,(structsockaddr*)server_sockaddr,

          sizeof(structsockaddr))==-1)

          {

          perror(bind);

          exit(1);

          }

          if(listen(sockfd,MAX_QUE_CONN_NM)==-1)

          {

          perror(listen);

          exit(1);

          }

          printf(listening....n);

          /*將調用socket()函數(shù)的描述符作為文件描述符*/

          FD_ZERO(inset);

          FD_SET(sockfd,inset);

          while(1)

          {

          tmp_inset=inset;

          sin_size=sizeof(structsockaddr_in);

          memset(buf,0,sizeof(buf));

          /*調用select()函數(shù)*/

          if(!(select(MAX_SOCK_FD,tmp_inset,NULL,NULL,NULL)>0))

          {

          perror(select);

          }

          for(fd=0;fdMAX_SOCK_FD;fd++)

          {

          if(FD_ISSET(fd,tmp_inset)>0)

          {

          if(fd==sockfd)

          {/*服務端接收客戶端的連接請求*/

          if((client_fd=accept(sockfd,

          (structsockaddr*)client_sockaddr,sin_size))==-1)

          {

          perror(accept);

          exit(1);

          }

          FD_SET(client_fd,inset);

          printf(Newconnectionfrom%d(socket)n,client_fd);

          }

          else/*處理從客戶端發(fā)來的消息*/

          {

          if((count=recv(client_fd,buf,BUFFER_SIZE,0))>0)

          {

          printf(Receivedamessagefrom%d:%sn,

          client_fd,buf);

          }

          else

          {

          close(fd);

          FD_CLR(fd,inset);

          printf(Client%d(socket)hasleftn,fd);

          }

          }

          }/*endofifFD_ISSET*/

          }/*endofforfd*/

          }/*endifwhilewhile*/

          close(sockfd);

          exit(0);

          }

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          linux相關文章:linux教程




          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();