• <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>

            那誰的技術博客

            感興趣領域:高性能服務器編程,存儲,算法,Linux內核
            隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
            數據加載中……

            lighttpd1.4.18代碼分析(七)--狀態機(1)CON_STATE_REQUEST_START狀態

            本節開始分析lighttpd中處理連接的狀態機,也就是connections.c文件中的connection_state_machine函數.我們將沿著上一節中給出的狀態機示意圖一步一步往下走,以圖把這個過程分析清楚.這也是目前為止唯一一個詳細進行分析的函數,希望這樣可以更加突出這個函數的重要性.

            一)CON_STATE_REQUEST_START狀態
            這個狀態出現在剛剛通過accept函數接收一個新的連接時,此時需要保存一些數據:
                    case CON_STATE_REQUEST_START: /* transient, 開始接收請求 */
                        
            if (srv->srvconf.log_state_handling) {
                            log_error_write(srv, __FILE__, __LINE__, 
            "sds",
                                    
            "state for fd", con->fd, connection_get_state(con->state));
                        }

                        
            // 保存時間
                        con->request_start = srv->cur_ts;
                        con
            ->read_idle_ts = srv->cur_ts;

                        
            // 該連接的請求次數
                        con->request_count++;
                        
            // 每次循環處理的請求次數
                        con->loops_per_request = 0;

                        
            // 狀態改為可讀, 也就是可以接收數據
                        connection_set_state(srv, con, CON_STATE_READ);

                        
            /* patch con->conf.is_ssl if the connection is a ssl-socket already */

            #ifdef USE_OPENSSL
                        con
            ->conf.is_ssl = srv_sock->is_ssl;
            #endif

                        
            break;
            需要注意的是這里將connetion中的兩個字段保存為當前時間,request_start和read_idle_ts, 前者存放的是接收連接的時間, 后者用于超時判斷, 在第5節講解lighttpd中如何處理超時的時候提到過,lighttpd設置了一個每一秒一次的定時器, 每次定時器到時就依次輪詢所有的連接, 判斷是否超時, 而判斷的依據就是拿當前的時間 - connection的read_idle_ts字段, 看看是否超時:
             // 如果當前時間與read_idle_ts之差大于max_read_idle, 超時
                                        if (srv->cur_ts - con->read_idle_ts > con->conf.max_read_idle) {
                                            
            /* time - out */

                                            connection_set_state(srv, con, CON_STATE_ERROR);
                                            changed 
            = 1;
                                        }

            這些該保存的數據都保存完畢之后, 狀態機進入下一個狀態,CON_STATE_READ, 也就是開始接收數據, 這是下一節要講解的內容了.


            posted on 2008-09-22 15:10 那誰 閱讀(2954) 評論(0)  編輯 收藏 引用 所屬分類: 網絡編程服務器設計Linux/Unixlighttpd

            欧美国产精品久久高清| …久久精品99久久香蕉国产| 久久影院亚洲一区| 亚洲伊人久久精品影院| 狠狠久久亚洲欧美专区| 免费一级做a爰片久久毛片潮| 久久精品国产亚洲av麻豆图片| 秋霞久久国产精品电影院| 2021国内久久精品| 国内精品久久久久久不卡影院| 日韩人妻无码精品久久久不卡| 久久精品无码一区二区三区免费| 新狼窝色AV性久久久久久| 亚洲伊人久久成综合人影院 | 国产激情久久久久影院| 777午夜精品久久av蜜臀| 久久久人妻精品无码一区| 国产99久久久国产精免费| 91精品国产91久久久久福利| 久久精品国产亚洲av麻豆蜜芽| 久久久久亚洲精品天堂久久久久久 | 奇米影视7777久久精品人人爽| 99热成人精品免费久久| 狠色狠色狠狠色综合久久| 久久亚洲精品无码AV红樱桃| 久久久国产打桩机| 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 久久久久久狠狠丁香| 久久国产热精品波多野结衣AV| 狠狠色婷婷久久综合频道日韩 | 久久久久久精品免费看SSS | 久久婷婷五月综合97色直播| 色综合久久综合网观看| 人人狠狠综合久久亚洲婷婷| 久久这里只精品国产99热| 久久精品九九亚洲精品天堂 | 国产精品美女久久久久| 国产精品毛片久久久久久久 | 伊人色综合九久久天天蜜桃| 波多野结衣久久精品| 亚洲国产另类久久久精品小说|