2009-12-11 151 views
1

假設您有2個套接字(每個套接字將被其他TCP對等端監聽),每個套接字駐留在同一個進程上,這些套接字如何綁定,這意味着彼此的輸入流將綁定到其他輸出流。套接字將持續傳輸數據,不會等待。通常螺紋可以解決這個問題,但是,而不是創建螺紋有更有效的方式管道插座?TCP套接字管道

回答

1

如果您需要將套接字的兩端連接到相同的進程,請改用pipe()函數。該函數返回兩個文件描述符,一個用於寫入,另一個用於讀取。爲此,實際上不需要涉及TCP。

更新:根據您對用例的說明,不,沒有辦法告訴操作系統將兩個不同套接字的末端連接在一起。您必須編寫代碼才能從一個套接字讀取數據,並將相同的數據寫入另一個套接字。根據您的流程體系結構,您可能需要或不需要額外的線程來完成這項工作。例如,如果您的應用程序基於select()循環,則不需要創建另一個線程。

+0

事實上,這些套接字將被客戶端收聽,所以需要套接字 – whoi 2009-12-11 09:21:21

+0

看來我誤解了你的用例。我會更新我的答案。 – 2009-12-11 09:23:43

+0

你是說socket select()函數嗎,你能澄清一下嗎? – whoi 2009-12-11 09:32:37

0

您可以在進程中避免使用事件隊列的線程。 WP Message queue文章假設您希望進程間消息傳遞,但是如果您使用套接字,那麼您正在通過同一進程傳遞進程間消息。