Epoll實驗總結

2021-08-02 13:52:59 字數 1558 閱讀 7936

2012-09-06 15:54:10|  分類: network_program

|  標籤:

epoll

c |舉報 |字型大小

訂閱

我的**書  |

一、超時實驗

建立乙個阻塞模式的tcp連線到乙個沒有監聽的服務埠(肯定連不上,然後等待超時),然後將這個socket描述符,交由epoll管理。註冊的epoll事件為

event = epollin | epollout | epollrdhup | epollerr | epollet |

epollpri | epollhup

結果:當tcp連線超時的時候,觸發的事件有epollin 、 epollout 、epollrdhup 、 epollerr、epollhup,也就是只有緊急資料的事件沒有發生。

二、呼叫read(),返回0時,繼續write()

建立乙個阻塞模式的tcp連線到有監聽的伺服器端口上,然後將這個socket描述符,交由epoll管理。註冊的epoll事件為

event = epollin | epollout | epollrdhup | epollerr | epollet |

epollpri | epollhup

當該描述符可寫時,寫10位元組的資料到服務端;當該描述符可讀時,讀10位元組的資料;服務端讀10位元組的資料,然後休眠5秒,之後close連線。

實驗結果,總結如下:

1,  tcp三次握手一旦完成,該socket描述符的epollout觸發,即可寫

2,  服務端休眠5秒後,關閉連線。觸發的事件有epollin 、 epollout 、epollrdhup 、 epollerr、epollhup。此時read返回0,write仍然可寫

3,  之後又觸發了epollin 、 epollout事件。此時read仍然返回0,write出錯,錯誤為sigpipe。這次觸發的原因是,在2中的write了乙個closed的連線,由於非阻塞,造成write成功的假象,所以這兒epoll又接到了通知,彌補上一步的錯誤。

三、呼叫read,返回0,不再write

建立乙個阻塞模式的tcp連線到有監聽的伺服器端口上,然後將這個socket描述符,交由epoll管理。註冊的epoll事件為

event = epollin | epollout | epollrdhup | epollerr | epollet |

epollpri | epollhup

當read返回0後,不再write資料到服務端;服務端讀10位元組的資料,然後休眠5秒,之後close連線。

實驗結果:

1,  tcp三次握手一旦完成,該socket描述符的epollout觸發,即可寫

2,  觸發epollin 、 epollout 、epollrdhup 、 epollerr、epollhup。此時read返回0。之後不再有事件觸發

四、在et模式下,只需註冊epollin | epollout就可以了,如果有錯誤發生,這兩個事件也被能觸發,然後判斷錯誤型別就可以了

epoll特點總結

2.1 ppc tpc模型 這兩個模型就是有個連線來了就給分配個程序 執行緒,前者肯定更費資源了,因為這麼多程序 執行緒不是吃素的,都要時間和空間,開銷大,所以併發只有幾百?也沒說epoll 是如何分配的?也就是說那兩個得遍歷所有,和連線數有關!epoll也遍歷,但是只遍歷活躍的所以效率高。強調實際...

epoll使用總結

epoll的使用總結 使用epoll來實現乙個tcp server,中間碰到了不少使用細節上的問題,總結一下。man epoll裡推薦的使用方法 define max events 10 struct epoll event ev,events max events intlisten sock,c...

epoll之二 epoll實戰

int epoll create int size epoll create返回 乙個控制代碼,之後epoll的 使用都將依靠這個 控制代碼 來 標識,引數 size是告訴epoll所要處理的大致事件數目,不再使用epoll時,必須呼叫close 關閉這個控制代碼。size這個引數只是 告訴核心這個...