Linux
如果接收器無法通過套接字處理數據速度會發生什麼?
我有兩個程序 P1(發送者)和 P2(接收者)。P1 用於
unix-domain-socket (UDS)
向 P2 發送數據。如果 P1 以 100 條消息/秒的速率發送數據而 P2 能夠接收 50 條消息/秒會發生什麼。兩者都是非阻塞套接字。在上述情況下發生了什麼?p1 或 p2 會在一段時間後面臨記憶體耗盡嗎?
團隊,請解釋在上述情況下會發生什麼。
謝謝。
如果接收方的讀取速度不如發送方發送的速度,那麼套接字緩衝區會在一段時間後填滿。
當假設數據報套接字類型時,如果緩衝區已滿,阻塞套接字將阻塞,從而隱式減慢發送方的速度。使用非阻塞套接字,消息的發送將失敗,並且
EAGAIN
將作為錯誤返回send
。請注意,這僅適用於數據報類型的 unix 域套接字。使用 UDP 套接字,發送將成功,消息只會失去。使用流套接字,可能會寫入部分消息,無論套接字是阻塞的還是非阻塞的。發送方需要檢查實際寫入了多少字節(返回
send
),並確保稍後發送剩餘的數據。對於非阻塞套接字,它send
也可能完全失敗EAGAIN
,而對於阻塞套接字,它將阻塞並等待接收器讀取一些數據,以便在套接字緩衝區中再次擁有空間。