2012-11-27 31 views
1

對於單線程服務器,我有下面的代碼。我想知道,如果我收到一個數據包(並開始處理它)而另一個數據包到達,而我沒有在監聽(忙處理),會發生什麼。操作系統是否會緩衝數據包並等待,直到套接字再次偵聽,或數據包是否丟失?操作系統緩衝數據包的UDP

  While(true){ 
       UDPsocket.receive(packetBuff); 
       //Do stuff 
      } 

注:該應用程序是運行在Linux上(Ubuntu的12.04)

+0

@paxdiablo Linux –

回答

2

操作系統具有接收緩衝區它可以存儲數據時,你的程序正忙。您可以使用getsockopt()SO_RCVBUF選項來查看/更改接收緩衝區大小,以及發送緩衝區的SO_SNDBUF。通常會有一個系統範圍的默認值,以及您可以爲此設置的系統範圍的最大大小。

默認值是什麼,以及如何查看,取決於您正在使用的操作系統。默認值通常介於32K和256K之間的數據,它會爲你緩衝。

+0

SO_RCVBUF如果是接收緩衝區,並且SO_SNDBUF是發送緩衝區。一個不會改變另一個。 –

+0

糟糕,你是對的。固定。 – whamma

1

將數據包放入隊列並在收到當前數據包後進行檢索。

+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲望](http://stackoverflow.com/faq#reputation),你將能夠[評論任何帖子](http://stackoverflow.com/privileges/comment)。 – Nikhil

+0

@Nik當然,它提供了一個答案。胡說些什麼。 – EJP