• <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 - 15, comments - 10, trackbacks - 0, articles - 0

            UNIX網(wǎng)絡(luò)編程讀書筆記

            Posted on 2013-10-31 00:32 whspecial 閱讀(2729) 評(píng)論(1)  編輯 收藏 引用 所屬分類: linux編程
               這一段在看《unix網(wǎng)絡(luò)編程》,回顧之前做項(xiàng)目用到的一些東西,在這里總結(jié)一下:

               (1)TCP套接口編程
               這里介紹各個(gè)接口函數(shù):
               1 文件描述符
               -socket(int domain, int type, int protocol); //生成文件描述符
               -bind(int sockfd, struct sockaddr *my_addr, int addrlen); //將本地的一個(gè)端口綁定到fd上,一般只需要在server端
               2 服務(wù)端
               -listen(int sockfd, int backlog); //有兩個(gè)作用:1,將主動(dòng)套接口變?yōu)楸粍?dòng)套接口;2,設(shè)置最大連接數(shù)backlog
               -accept(int sockfd, void *addr, int *addrlen); //為建立好的連接生成一個(gè)新的fd
               3 客戶端
               -connect(int sockfd, struct sockaddr *serv_addr, int addrlen); //進(jìn)行socket連接
               4 通信
               -send(int sockfd, const void *msg, int len, unsigned int flags); //發(fā)送請(qǐng)求
               -recv(int sockfd, void *buf, int len, unsigned int flags); //接收請(qǐng)求



               (2)I/O多路復(fù)用
               I/O多路復(fù)用是指內(nèi)核一旦發(fā)現(xiàn)進(jìn)程指定的一個(gè)或者多個(gè)IO條件準(zhǔn)備讀取,它就通知該進(jìn)程。按照《UNIX網(wǎng)絡(luò)編程》的說法,I/O多路復(fù)用用于以下三種情況:
               a)一個(gè)TCP服務(wù)器既要處理監(jiān)聽套接口,又要處理已連接套接口;
               b)一個(gè)服務(wù)器既要處理TCP,又要處理UDP;
               c)當(dāng)客戶端處理多個(gè)描述字(比如處理交互式輸入和網(wǎng)絡(luò)套接口)
               目前被廣泛使用的是select和epoll:
               2.1,select
               int select(int maxfdp1,fd_set *readset,fd_set *writeset,fd_set *exceptset,const struct timeval *timeout)
               第一個(gè)參數(shù)指定最大的fd數(shù)目,中間三個(gè)分別是被監(jiān)控的讀、寫、異常的fd集,最后一個(gè)是超時(shí)時(shí)間。select函數(shù)會(huì)阻塞等待,直到監(jiān)控的fd集中有fd就緒,或者已經(jīng)超時(shí)。
               2.2,epoll
               epoll相比于select,主要的好處在于它不像select一樣去輪詢fd集,而是由內(nèi)核去觸發(fā);另外它支持更大的fd個(gè)數(shù)

               (3)網(wǎng)絡(luò)服務(wù)器模型
               其實(shí)網(wǎng)絡(luò)服務(wù)器模型還是比較復(fù)雜的,有一篇比較經(jīng)典的文章叫做c10K problem,鏈接如下:http://www.kegel.com/c10k.html
               這里記錄的是很簡(jiǎn)單的幾種多線程TCP服務(wù)器模型,順便可以比較下:
               2.1 主線程accept,為每個(gè)client創(chuàng)建一個(gè)線程
               2.2 使用線程池,全部accept,當(dāng)有連接來的時(shí)候其中某個(gè)線程進(jìn)行處理
               2.3 使用線程池,主線程accept,當(dāng)有連接來的時(shí)候主線程將其放入隊(duì)列,由工作線程進(jìn)行處理(生產(chǎn)者-消費(fèi)者模型)
               1方案過于頻繁地進(jìn)行線程創(chuàng)建銷毀,2方案在一個(gè)連接過來時(shí)會(huì)帶來驚群現(xiàn)象,3方案會(huì)比前兩個(gè)方案要好一些。

            Feedback

            # re: UNIX網(wǎng)絡(luò)編程讀書筆記  回復(fù)  更多評(píng)論   

            2013-10-31 10:01 by 孤獨(dú)劍客zzy
            謝謝分享!

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久久久免费看成人影片| 国产激情久久久久影院| 国内精品欧美久久精品| 91精品国产综合久久久久久 | 久久精品一区二区国产| 久久综合噜噜激激的五月天| 无码任你躁久久久久久| 久久经典免费视频| 精品国产乱码久久久久软件| 一本色道久久88综合日韩精品 | 丁香久久婷婷国产午夜视频| 777久久精品一区二区三区无码| 久久99国产乱子伦精品免费| 国产精品久久久天天影视| 国产精品久久网| 精品久久久久久无码中文字幕 | 亚洲а∨天堂久久精品9966| 狠狠色丁香久久婷婷综合蜜芽五月 | 伊人色综合久久天天| 久久精品国产清自在天天线| 亚洲午夜福利精品久久| 久久久一本精品99久久精品88| 好久久免费视频高清| 久久精品成人欧美大片| 亚洲欧美日韩精品久久亚洲区 | 蜜臀久久99精品久久久久久| 国产99久久久国产精品小说| 久久青青草原亚洲av无码app | 久久久91人妻无码精品蜜桃HD| 久久中文字幕精品| 国产精品久久久久国产A级| 99热热久久这里只有精品68| 国产成年无码久久久免费| 久久青青草原综合伊人| 2020国产成人久久精品| 91久久福利国产成人精品| 伊人精品久久久久7777| 国产精品美女久久久久网| 伊人伊成久久人综合网777| 91精品久久久久久无码| 久久亚洲欧美国产精品|