簡體   English   中英

向套接字發送數據時如何模擬 EAGAIN 或 EWOULDBLOCK

[英]How to simulate EAGAIN or EWOULDBLOCK when send data to socket

我有一個非阻塞套接字來發送數據。 當以非阻塞模式向套接字發送數據時,如果套接字緩沖區沒有足夠的空間,我們可以得到 EAGAIN 或 EWOULDBLOCK。 如果 send 調用返回 EAGAIN 或 EWOULDBLOCK,我訂閱了 epoll 中的 EPOLLOUT 事件,以了解套接字何時准備好將來重新發送數據。

但是,在實踐中,我從來沒有遇到過 send 會返回 EAGAIN 或 EWOULDBLOCK 並且我沒有從 epoll 獲得 EPOLLOUT 事件的情況。 因此,我無法測試在收到 EPOLLOUT 事件時重新發送數據的代碼。 在這種情況下我如何測試我的代碼?

在這種情況下我如何測試我的代碼?

這在很大程度上取決於您的應用程序和協議類型。 一般來說,要觸發套接字寫入緩沖區需要填滿的條件。

這可以通過發送大量數據並確保接收方應用程序不從套接字讀取來完成。 但是,如果您的特定應用程序協議不允許這樣做,這將不起作用,例如應用程序協議的消息大小較小,並且希望每條消息在下一次傳輸之前都得到接收者的確認。

這也可以通過減小套接字緩沖區的大小(將setsockoptSO_SNDBUFSIZ一起使用)來完成 - 但尚不清楚最小緩沖區大小是否足以觸發特定用例中的條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM