在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

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

            本文引用地址:http://www.biyoush.com/article/257115.htm

            10.3

            在實際情況中,人們往往遇到多個客戶端連接服務器端的情況。由于之前介紹的如connet()、recv()和send()等都是阻塞性函數(shù),如果資源沒有準備好,則調用該函數(shù)的進程將進入睡眠狀態(tài),這樣就無法處理I/O多路復用的情況了。本節(jié)給出了兩種解決I/O多路復用的解決方法,這兩個函數(shù)都是之前學過的()和()(請讀者先復習第6章中的相關內容)??梢钥吹?,由于在Linux中把socket也作為一種特殊文件描述符,這給用戶的處理帶來了很大的方便。

            1.()

            函數(shù)()針對socket編程提供了如下的編程特性。

            n 非阻塞I/O:可將cmd設置為F_SETFL,將lock設置為O_NONBLOCK。

            n 異步I/O:可將cmd設置為F_SETFL,將lock設置為O_ASYNC。

            下面是用fcntl()將套接字設置為非阻塞I/O的實例代碼:

            /*net_fcntl.c*/

            #includesys/types.h>

            #includesys/socket.h>

            #includesys/wait.h>

            #includestdio.h>

            #includestdlib.h>

            #includeerrno.h>

            #includestring.h>

            #includesys/un.h>

            #includesys/time.h>

            #includesys/ioctl.h>

            #includeunistd.h>

            #includenetinet/in.h>

            #includefcntl.h>

            #definePORT1234

            #defineMAX_QUE_CONN_NM5

            #defineBUFFER_SIZE1024

            intmain()

            {

            structsockaddr_inserver_sockaddr,client_sockaddr;

            intsin_size,recvbytes,flags;

            intsockfd,client_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);

            /*調用fcntl()函數(shù)給套接字設置非阻塞屬性*/

            flags=fcntl(sockfd,F_GETFL);

            if(flags0||fcntl(sockfd,F_SETFL,flags|O_NONBLOCK)0)

            {

            perror(fcntl);

            exit(1);

            }

            while(1)

            {

            sin_size=sizeof(structsockaddr_in);

            if((client_fd=accept(sockfd,

            (structsockaddr*)client_sockaddr,sin_size))0)

            {

            perror(accept);

            exit(1);

            }

            if((recvbytes=recv(client_fd,buf,BUFFER_SIZE,0))0)

            {

            perror(recv);

            exit(1);

            }

            printf(Receivedamessage:%sn,buf);

            }/*while*/

            close(client_fd);

            exit(1);

            }

            運行該程序,結果如下所示:

            $./net_fcntl

            Listening....

            accept:Resourcetemporarilyunavailable

            可以看到,當accept()的資源不可用(沒有任何未處理的等待連接的請求)時,程序就會自動返回。

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

            linux相關文章:linux教程



            上一頁 1 2 3 下一頁

            評論


            相關推薦

            技術專區(qū)

            關閉