對於單線程服務器,我有下面的代碼。我想知道,如果我收到一個數據包(並開始處理它)而另一個數據包到達,而我沒有在監聽(忙處理),會發生什麼。操作系統是否會緩衝數據包並等待,直到套接字再次偵聽,或數據包是否丟失?操作系統緩衝數據包的UDP
While(true){
UDPsocket.receive(packetBuff);
//Do stuff
}
注:該應用程序是運行在Linux上(Ubuntu的12.04)
對於單線程服務器,我有下面的代碼。我想知道,如果我收到一個數據包(並開始處理它)而另一個數據包到達,而我沒有在監聽(忙處理),會發生什麼。操作系統是否會緩衝數據包並等待,直到套接字再次偵聽,或數據包是否丟失?操作系統緩衝數據包的UDP
While(true){
UDPsocket.receive(packetBuff);
//Do stuff
}
注:該應用程序是運行在Linux上(Ubuntu的12.04)
操作系統具有接收緩衝區它可以存儲數據時,你的程序正忙。您可以使用getsockopt()
和SO_RCVBUF
選項來查看/更改接收緩衝區大小,以及發送緩衝區的SO_SNDBUF
。通常會有一個系統範圍的默認值,以及您可以爲此設置的系統範圍的最大大小。
默認值是什麼,以及如何查看,取決於您正在使用的操作系統。默認值通常介於32K和256K之間的數據,它會爲你緩衝。
SO_RCVBUF如果是接收緩衝區,並且SO_SNDBUF是發送緩衝區。一個不會改變另一個。 –
糟糕,你是對的。固定。 – whamma
@paxdiablo Linux –