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

            8.1.2 非鎖定模式
            除了鎖定模式,我們還可考慮采用非鎖定模式的套接字。盡管這種套接字在使用上存在著些許難度,但只要排除了這項困難,它在功能上還是非常強大的。除具備鎖定套接字已有的各項優點之外,還進行了少許擴充,功能更強。程序清單8 - 3向大家展示了如何創建一個套接字,并將其置為非鎖定模式。
            程序清單8-3 設置一個非鎖定套接字

            SOCKET s;
            unsigned long u1 = 1;
            int nRet;
            s = SOCKET(AF_INET,SOCK_STREA,0);
            nRet = ioctlsocket(s,FIOBIO,(unsigned long *)&ul);
            if(nRet == SOCKET_ERROR)
            {
            ?//Failed to put the socket into nonblocking mode
            }

            將一個套接字置為非鎖定模式之后, Winsock API調用會立即返回。大多數情況下,這些調用都會“失敗”,并返回一個W S A E W O U L D B L O C K錯誤。什么意思呢?它意味著請求的操作在調用期間沒有時間完成。舉個例子來說,假如在系統的輸入緩沖區中,尚不存在“待決”的數據,那么r e c v(接收數據)調用就會返回W S A E W O U L D B L O C K錯誤。通常,我們需要重復調用同一個函數,直至獲得一個成功返回代碼。在表8 - 2中,我們對常見Wi n s o c k調用返
            回的W S A E W O U L D B L O C K錯誤的含義進行了總結。
            由于非鎖定調用會頻繁返回W S A E W O U L D B L O C K錯誤,所以在任何時候,都應仔細檢查所有返回代碼,并作好“失敗”的準備。許多程序員易犯的一個錯誤便是連續不停地調用一個函數,直到它返回成功的消息為止。例如,假定在一個緊湊的循環中不斷地調用r e c v,以讀入2 0 0個字節的數據,那么與使用前述的M S G _ P E E K標志來“輪詢”一個鎖定套接字相比,
            前一種做法根本沒有任何優勢可言。為此, Wi n s o c k的套接字I / O模型可幫助應用程序判斷一個套接字何時可供讀寫。
            鎖定和非鎖定套接字模式都存在著優點和缺點。其中,從概念的角度說,鎖定套接字更易使用。但在應付建立連接的多個套接字時,或在數據的收發量不均,時間不定時,卻顯得極難管理。而另一方面,假如需要編寫更多的代碼,以便在每個Wi n s o c k調用中,對收到一個W S A E W O U L D B L O C K錯誤的可能性加以應付,那么非鎖定套接字便顯得有些難于操作。在這些情況下,可考慮使用“套接字I / O模型”,它有助于應用程序通過一種異步方式,同時對一個或多個套接字上進行的通信加以管理。
            表8-2 非鎖定套接字上的W S A E W O U L D B L O C K錯誤函數名說明

            W S A A c c e p t和a c c e p t?? 應用程序沒有收到連接請求。再次調用,便可檢查連接情況
            c l o s e s o c k e t??????????大多數情況下,這個錯誤意味著已隨S O _ L I N G E R選項一道,調用了s e t s o c k o p t,而且已設定了一個非零的超時值
            W S A C o n n e c t和c o n n e c t???????應用程序已初始化。再次調用,便可檢查是否完成
            W S A R e c v、r e c v、W S A R e c v F r o m和r e c v f r o m 沒有收到數據。稍后再次檢查
            W S A S e n d、s e n d、W S A S e n d To和s e n d t o 外出數據無緩沖區可用。稍后再試

            Posted on 2006-09-12 11:10 艾凡赫 閱讀(515) 評論(0)  編輯 收藏 引用 所屬分類: 網絡編程
            99久久精品免费看国产| 久久精品无码一区二区无码| 国产L精品国产亚洲区久久 | 99久久精品免费看国产免费| 久久99精品久久久久久9蜜桃 | 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 亚洲精品tv久久久久| 色欲久久久天天天综合网| 久久这里只有精品久久| 欧美亚洲国产精品久久| 久久se精品一区二区影院| 久久精品水蜜桃av综合天堂| 久久久久国产精品三级网| 777米奇久久最新地址| 久久精品国产亚洲AV忘忧草18| 精品人妻久久久久久888| 久久久这里只有精品加勒比| 国产 亚洲 欧美 另类 久久| 亚洲国产精品无码久久久秋霞2 | 久久婷婷五月综合成人D啪| 亚洲午夜无码AV毛片久久| 国产成人精品久久一区二区三区| 亚洲日韩欧美一区久久久久我| 亚洲嫩草影院久久精品| 久久婷婷成人综合色综合| 思思久久精品在热线热| 精品国产一区二区三区久久蜜臀| 久久久噜噜噜www成人网| 久久大香萑太香蕉av| 婷婷国产天堂久久综合五月| 欧美麻豆久久久久久中文| 国产精品内射久久久久欢欢 | 亚洲国产精品无码久久久秋霞2| 热综合一本伊人久久精品| 精品久久久久久无码中文野结衣 | 性做久久久久久久久浪潮| 欧美麻豆久久久久久中文| 久久播电影网| 美女久久久久久| 国产精品久久久香蕉| 亚洲国产小视频精品久久久三级|