2010-07-22 92 views
7

我記得在某處看過一個套接字可以被認爲是兩個獨立的半雙工信道。這是否意味着相同套接字的recv()send()實際上是不相關的?同時在一個套接字上recv()和send()是否安全?

  • 如果是這樣,它是根據定義還是 實現特定?
  • 如果不是,這兩者如何相互干擾?

謝謝。

+1

取決於協議。 TCP是全雙工的,所以是的。 – 2010-07-22 11:54:39

+0

謝謝,你有沒有反例呢?或任何其他參考鏈接/代碼,以便我可以閱讀? – 2010-07-22 12:01:41

回答

1

我很好奇你怎麼看他們互相干擾。你是否認爲你可能會收到你發送的內容?

+1

不,我指的是如何影響另一方行爲的正確性或效率。例如,如果他們共享相同的緩衝區,那麼很可能必須等到另一個處於空閒狀態,對吧? – 2010-07-22 11:40:03

+1

您可以發出阻塞或非阻塞發送和接收。阻塞時,您傳入的數據緩衝區是數據緩衝區。沒有混淆的機會。在非阻塞的情況下,您的數據緩衝區被複制。關於交叉使用的API文檔沒有限制,所以它們必須使用不同的緩衝區;因爲如果他們不是,他們不可能是非阻塞的(他們將不得不阻止對方)。 – 2010-07-29 08:59:36

1

如果是SOCK_STREAM,可以同時使用send/recv。

例: 假設你有兩個線程,一個負責發送數據 和第二個是負責接收您可以按照

主程序做數據: 得到套接字fd。 創建一個POSIX線程發送緩衝區到這個fd。 創建一個POSIX線程來接收從這個fd到達的數據。 連接到服務器。

線程1例程: 構造一個消息緩衝區; 發送緩衝區到這個fd。

線程2例程: 從此fd收回數據。 處理日期。

相關問題