linux 下select的1024限制

來源:互聯網
上載者:User

標籤:

1024限定的不只是監聽的個數,還是檔案描述符的最大值,注意,是值

 

今天編寫類比用戶端程式進行測試,使用了select。之前一直錯記成1024是對fd_set裡fd個數的限制(我的程式是每次select一個fd,所以自我感覺沒問題),結果在socket串連個數到達1050~1100時,總發生段錯誤。

查看了core檔案,反覆理清程式的思路,都找不到問題點。更讓我費解的是,通過注釋部分代碼(都是局部變數相關的),結果程式變成socket串連到達1500左右時發生段錯誤。

 

後來想到試試是不是select有問題,類比程式不調用select,全部採用阻塞的socket,結果測試到10000個socket串連都沒有問題。

 

最後在網上看到select中限定的fd的值最大值是FD_SETSIZE(我的環境下是1024),而不是個數。

也有人持反對意見,比如對值為1025的fd進行select也沒問題。對此我沒有測試,但結合我的實際情況是,對超過1024的fd進行select,問題不能立刻暴露(我都一直到1500了),但可能會存在

類似越界訪問之類的問題(segment fault)。

 

之前還一直想不通,一直以為是類似ulimit的限制沒有修改。但矛盾的是相同的配置,用poll/epoll寫的服務端卻可以測試到10K以上,現在終於瞭然。

linux 下select的1024限制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.