如果接收器無法透過套接字處理資料速度會發生什麼?

如果接收器無法透過套接字處理資料速度會發生什麼?

我有兩個進程 P1(發送者)和 P2(接收者)。 P1用於unix-domain-socket (UDS)向P2發送資料。如果 P1 以 100 則訊息/秒的速率發送資料且 P2 能夠接收 50 則訊息/秒,將會發生什麼情況。兩者都是非阻塞套接字。

上述場景中發生了什麼事?一段時間後p1或p2會面臨記憶體耗盡嗎?

團隊,請解釋一下在上述場景中會發生什麼。

謝謝。

答案1

如果接收方的讀取速度不如發送方的發送速度,那麼套接字緩衝區會在一段時間後填滿。

當假設資料報套接字類型時,如果緩衝區已滿,阻塞套接字將阻塞,從而隱式減慢發送者的速度。對於非阻塞套接字,訊息的傳送只會失敗,並且EAGAIN將作為錯誤傳回send。請注意,這僅適用於資料封包類型的 unix 網域套接字。使用 UDP 套接字,發送將會成功,但訊息只會遺失。

對於流套接字,無論套接字是阻塞還是非阻塞,都可能寫入部分訊息。發送方需要檢查實際寫入了多少位元組(返回send)並確保稍後發送剩餘的資料。對於非阻塞套接字,send也可能完全失敗EAGAIN,而對於阻塞套接字,它會阻塞並等待接收器讀取一些數據,以便在套接字緩衝區中再次擁有空間。

相關內容