2013/05/21

解開 fd_set size limitation

寫 socket programming 時會用 select 搭配 fd_set 來偵測 file descriptor 是否可讀寫
但 Linux 系統預設的 fd_set size 只有 1024,若同時間處理的 fd 超過 1024 就會出問題


修改下面這兩個檔案,重新 build application 時就會引用到新的 define 值

/usr/include/bits/typesizes.h:
#define    __FD_SETSIZE        1024

/usr/include/linux/posix_types.h:
#define    __FD_SETSIZE        1024


3 則留言:

  1. http://www.moythreads.com/wordpress/2009/12/22/select-system-call-limitation/
    根據這篇文章,設超過 1024 會導致未知的錯誤,因為 Linux 是用固定大小的結構做為每個連結的旗標。這個結構在 32 位元的平台,最多只有 1024位元。要擴充這個容量,看起來不只是要更動這個資料結構,連帶的程式碼也要更動。作者建議在 Linux 平台上可用 epoll 取代 select 來管理大量連線。

    回覆刪除

  2. Sosyal medya hesaplarınızın hızlı ve etkili büyümesi için smm panel hizmetlerinden faydalanabilirsiniz. Bu panel sayesinde takipçi beğeni ve yorum gibi etkileşimleri artırmak oldukça kolaydır. Güvenilir platformlar arasında yer alan smm panel ile fark yaratmak artık çok daha erişilebilir hale geldi.

    回覆刪除