<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                1. epoll需要把socket設置為非阻塞么。 * 結論: * 對于監聽的 listenfd,最好使用**水平觸發模式**,**邊緣觸發模式會導致高并發情況下,有的客戶端會連接不上**。如果非要使用邊緣觸發,可以用 while 來循環 accept()。 * **在水平模式下 connfd**,阻塞非阻塞是一樣的。在邊緣模式下,必須使用非阻塞。 * 理由: * **邊緣模式 監聽的socket**,,在高并發時,如果沒有一次處理完所有請求,則會出現客戶端連接不上的問題。不需要討論 listenfd 是否阻塞,因為 epoll_wait() 返回的必定是已經就緒的連接,所以不管是阻塞還是非阻塞,accept() 都會立即返回。 * **如果使用的是阻塞socket,在邊緣模式下 connfd**,如果不讀取一個事件下的所有數據則會干擾下一個事件,所以需要嵌套一層循環,這樣才能完整的處理數據。因為外層次嵌套了一層循環,則會在數據讀完了之后會卡在recv上,因為是阻塞io,如果沒數據可讀,它會一直等在那里,直到有數據可讀。但是這個時候,如果用另一個客戶端去連接服務器,服務器就不能受理這個新的客戶端了。 * 如果使用的是非阻塞socket,邊緣模式下,和阻塞版本一樣,必須在讀取數據的外部套一層循環,這樣才能完整的處理數據。因為非阻塞 IO 如果沒有數據可讀時,會立即返回,并設置 errno。這里我們根據 **EAGAIN** 和 **EWOULDBLOCK** 來判斷數據是否全部讀取完畢了,如果讀取完畢,就會正常退出循環了。 * 建議: 監聽listenfd使用水平模式,連接的connfd 使用邊緣模式+非阻塞。 2.非阻塞的socket,設置socket為非阻塞,需要設置recv的flags為非阻塞么,如果設置recv的flags參數為非阻塞則需要設置socket為非阻塞么。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看