2010-09-07 104 views
1

套接字上的發送數量是否有最大值?我發送工作高達約480發送之後,它開始返回-1套接字最大發送數量?

我正在使用Visual Studio 2008 vC++和套接字編程使用ACE。

+0

您需要提供有關您正在使用的系統和開發環境的其他信息。比如「在Windows Server 2008上使用Visual C++下的WinSocks ...」。 – tidwall 2010-09-07 06:07:22

+0

請正確標記您的問題。這與C或C++作爲編程語言沒有多大關係。 – 2010-09-07 11:45:14

回答

2

不,您可以調用的send()的數量沒有上限。 (例如:'perror(「error sending。system said」);')調用以查看哪個錯誤正在生成。

請注意,在這種情況下-1是一個通用的返回碼,可能意味着任何內容從「我的套接字關閉」到「您給我的參數不是有效的文件描述符」;因此,如果沒有進一步的信息,很難說出正在發生的事情。

編輯:假設上述答案* NIX;這是一個可憐的假設。

由於您使用ACE,請查看ACE :: send()文檔(doxygen是here)。此外,應該有一個ACE_OS :: perror(「error sending。system said」)調用(doxygen是here),它應該與我上面描述的類似。

HTH

+0

好的。我來看看那個.thanks – aks 2010-09-07 06:36:49

2

沒有具體的限制,但顯然你不能繼續以節點速度抽出它,如果接收方沒有儘快消耗速度。它們之間有各種緩衝區,無論軟件/硬件維護什麼,都會限制它們接受的數量。您需要等到接收方在繼續發送之前消耗一些數據。你可以得到一個異步通知,告訴socket何時變得可寫入......如果你使用的是BSD API,請檢查select或poll的細節。

+0

我的接收器正在阻塞等待,沒有數據讀取,所以這不是問題 – aks 2010-09-07 06:07:54

+0

如果我是你,我不會賭注:-)。無論接收器的狀態如何,您只需要在路徑的任何地方都需要一個緩衝區來暫時被淹沒,並且發送端將會失敗。真的,你應該嘗試我所建議的,然後再告訴我我錯了。 – 2010-09-07 06:15:30

+0

好的..我應該多久檢查一次?每次發送? – aks 2010-09-07 06:20:32

0

據我所知沒有這樣的限制。我已經將這項工作發送了幾天,發送數據沒有任何問題。

顯然還有一些其他問題。請提及更多細節。

此外,它可能是你發送太多的數據並填充緩衝區。檢查也。

+0

不...因爲我的接收器進入阻塞狀態,沒有任何數據可讀 – aks 2010-09-07 06:07:15