• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 34,comments - 2,trackbacks - 0

            Select模型出現(xiàn)的目的::模型的出現(xiàn)是為了解決一個(gè)客戶端一線程的問(wèn)題,為了WINDOWS的線程切換不要太頻繁。

             

            select函數(shù)

            int select(

            int maxfdp,   //忽略

            fd_set *readfds,//檢查可讀性

            fd_set *writefds,      //檢查可寫(xiě)性

            fd_set *errorfds,      //檢查錯(cuò)誤

            struct timeval *timeout   //指定函數(shù)等待的最長(zhǎng)時(shí)間

            );

             

            1、理解struct fd_set(一個(gè)套接字集合)

            struct fd_set可以理解為一個(gè)集合,這個(gè)集合中存放的是文件描述符(filedescriptor),即文件句柄,這可以是我們所說(shuō)的普通意義的文件,當(dāng)然Unix下任何設(shè)備、管道、FIFO等都是文件形式,全部包括在內(nèi),所以毫無(wú)疑問(wèn)一個(gè)socket就是一個(gè)文件,socket句柄就是一個(gè)文件描述符。

             

            2、使用struct fd_set

            FD_ZERO(fd_set * set) //清空集合

            FD_SET(s,fd_set * set) //添加套接字集合

            FD_CLR(s ,fd_set* set) //set移除套接字s

            FD_ISSET(s ,fd_set* set)//檢查集合中s是否set的成員

             

             

            3struct timeval

            struct timeval {   

            time_t tv_sec; /* */   

            suseconds_t tv_usec; /* 微秒*/  };

             

            4、參數(shù)含義

            fd_set*readfds我們是要監(jiān)視這些文件描述符的讀變化的,即我們關(guān)心是否可以從這些文件中讀取數(shù)據(jù)了,如果這個(gè)集合中有一個(gè)文件可讀,select就會(huì)返回一個(gè)大于0的值,表示有文件可讀,如果沒(méi)有可讀的文件,則根據(jù)timeout參數(shù)再判斷是否超時(shí),若超出timeout的時(shí)間,select返回0,若發(fā)生錯(cuò)誤返回負(fù)值。可以傳入NULL值,表示不關(guān)心任何文件的讀變化。   

            fd_set*writefds我們是要監(jiān)視這些文件描述符的寫(xiě)變化的,即我們關(guān)心是否可以向這些文件中寫(xiě)入數(shù)據(jù)了,如果這個(gè)集合中有一個(gè)文件可寫(xiě),select就會(huì)返回一個(gè)大于0的值,表示有文件可寫(xiě),如果沒(méi)有可寫(xiě)的文件,則根據(jù)timeout參數(shù)再判斷是否超時(shí),若超出timeout的時(shí)間,select返回0,若發(fā)生錯(cuò)誤返回負(fù)值。可以傳入NULL值,表示不關(guān)心任何文件的寫(xiě)變化。   

            fd_set *errorfds同上面兩個(gè)參數(shù)的意圖,用來(lái)監(jiān)視文件錯(cuò)誤異常。

             

            5、超時(shí)的設(shè)置

            struct timeval *timeoutselect的超時(shí)時(shí)間,這個(gè)參數(shù)至關(guān)重要,它可以使select處于三種狀態(tài)

            ①、若將NULL以形參傳入,即不傳入時(shí)間結(jié)構(gòu),就是將select置于阻塞狀態(tài),一定等到監(jiān)視文件描述符集合中某個(gè)文件描述符發(fā)生變化為止;

            ②、若將時(shí)間值設(shè)為00毫秒,就變成一個(gè)純粹的非阻塞函數(shù),不管文件描述符是否有變化,都立刻返回繼續(xù)執(zhí)行,文件無(wú)變化返回0,有變化返回一個(gè)正值;

            ③、timeout的值大于0,這就是等待的超時(shí)時(shí)間,即selecttimeout時(shí)間內(nèi)阻塞,超時(shí)時(shí)間之內(nèi)有事件到來(lái)就返回了,否則在超時(shí)后不管怎樣一定返回,返回值同上述。

             

            6、返回值:   

            負(fù)值:select錯(cuò)誤 正值:某些文件可讀寫(xiě)或出錯(cuò) 0:等待超時(shí),沒(méi)有可讀寫(xiě)或錯(cuò)誤的文件


             

            posted on 2011-08-23 21:07 Yu_ 閱讀(336) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)編程
            亚洲国产另类久久久精品小说| 久久青青草原精品国产软件| 欧美亚洲日本久久精品| 久久精品国产亚洲AV嫖农村妇女| 亚洲?V乱码久久精品蜜桃| 久久精品成人影院| 久久久久九九精品影院| 精品久久久无码中文字幕| 久久美女人爽女人爽| 国产午夜福利精品久久2021| 97精品伊人久久大香线蕉| 久久这里都是精品| 久久久久久久久久久| 91麻豆国产精品91久久久| 久久亚洲电影| 99久久精品免费看国产一区二区三区| 国产激情久久久久影院老熟女免费| 久久99热精品| 狠狠色伊人久久精品综合网| 久久精品免费大片国产大片| 久久影院亚洲一区| 无码任你躁久久久久久久| 亚洲国产成人久久综合一区77| 无码八A片人妻少妇久久| 日韩人妻无码精品久久久不卡| 久久久久女人精品毛片| 国产精品伦理久久久久久| 久久精品成人| 老男人久久青草av高清| 久久精品www人人爽人人| 亚洲伊人久久大香线蕉苏妲己| 久久亚洲高清综合| 一本色综合网久久| 青青国产成人久久91网| 久久人人爽人人爽人人片AV麻豆 | 国产69精品久久久久777| 成人精品一区二区久久| 国产精品久久久99| 久久久久精品国产亚洲AV无码 | 亚洲国产精品久久久久婷婷软件| 66精品综合久久久久久久|