2013-07-06 132 views
1

我有一個C程序,其中通過TCP套接字我發送命令到對等進程。 收到此命令後,對等進程將開始執行請求的命令。但是,它需要很長時間,我不希望tcp套接字等待很長時間才能返回值。我認爲,fork一個進程會幫助我做到這一點。但是,我想要其他一些方法來使這件事情成真。請分享您的想法和經驗。請幫忙。在此先感謝,從函數返回值而不退出函數C

+0

您希望在等待返回值時做什麼? – Joni

+0

一旦命令發送成功並從對等進程接收到確認,我想關閉此連接但不想等待對等進程執行該命令並返回一個值。 – Sougrakpam

+1

不能先關閉連接,然後運行長命令? – Kninnug

回答

0

UNIX中有多種形式的進程間通信(IPC)策略。我最喜歡的一項是產生一個子進程,並在其消亡時收到通知。關於IPC的入門知識可以在here找到,並且可以找到一個異步等待孩子進程死亡的例子here。如果您不想生成一個單獨的流程,則可以使用named pipes在兩個流程之間來回傳遞信息。

+0

我不想生成一個過程。有什麼其他的方式可以實現我們的目標。 – Sougrakpam

+0

命名管道也可以使用...系統V消息隊列...是的有一百萬種方法來剝皮這隻貓。 – ojblass

0

您可以使用一個線程並等待它,直到答覆出現。 pthread和wait會做得很好(雖然線程是輕量級的進程)。

如果你真的想永遠產卵的過程要做到這一點,你就必須採用類似的回調收到的TCP應答的情況下,這可能是從TCP包裝庫,但包括這樣的事情還是使一些如果你沒有等待很多回復,這是沒有意義的。對於少數回覆等待線程很好。

0

我沒有清楚你的意思。你說在你知道結果之前你想給出答案,或者可能是,返回值不取決於過程本身。就交易通信而言,存在兩種方法,即「同步」和「異步」交易。前者等待服務器完成de過程並給出結果,第二個將發送請求並獲取一個令牌,關閉該套接字,之後它將使用該令牌請求結果。所以,你可以做的是給被請求的同伴一個令牌,在該過程完成後它可以要求回答。請注意,您可能會給出一個答案,指出「過程仍在運行,稍後再試」。在您的服務器代碼中,您需要對此方案進行編程,爲每個過程分配一個數字,並將結果與​​該數字保持一致,並在請求時使用該數字發送結果。如果這不合適,請詳細解釋您要完成的工作。