天天看點

使用epoll&socket的總結

1. epoll 中使用et方式觸發,隻需EPOLL_CTL_ADD一次,把EPOLLIN  EPOLLOUT 事件全注冊,每個socket隻需建立add一次,其事件就會

     一直在epoll中,當然,socketclose 後應DEL掉。

2. ET觸發方式是指當fd到狀态發生變化時通知,如read buffer從無到有,write buffer從滿到不滿才會通知。

3. 若要将accept的檔案描述符添加到epoll,那麼同樣需要将socket設定為nonblock,調用accept時要循環讀,直到EWOULDBLOCK發生。

4. socket 無論是read/write事件,均需要循環讀,知道EWOULDBLOCK發生。

5. accept 觸發too many open file 時,accept到buffer已滿,若close掉一些socket,仍然不能接受新連接配接,參見第2條,是以需要調用EPOLL_CTL_MOD重新觸發accept事件,還一個簡單方案,監聽用到fd注冊epoll是使用LT觸發。

示例代碼:

<a href="http://code.google.com/p/ffown/source/browse/#svn%2Ftrunk">https://ffown.googlecode.com/svn/trunk</a>

繼續閱讀