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


1 則留言:

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

    回覆刪除