2012-05-21 28 views
1

我想知道是否有任何方法來創建一個已經創建,但封閉的套接字ID。我們使用下面這行代碼來創建一個套接字。強制套接字函數創建一箇舊的ID

sock = socket(AF_INET, SOCK_STREAM, 0); 

假如這個調用返回的ID爲3和此套接字在節目的過程中關閉。無論如何,爲我創建一個具有相同ID的套接字,3?

+0

你想解決什麼問題?如果你沒有傳遞一個dup()'ed fd,當原始所有者關閉()'文件時,你會遇到麻煩,並且你留下了一個無效的fd,這聽起來就像是你跑到這裏。 – tbert

回答

1

你有過通過調用返回open()socket()等文件描述符的唯一控制是所使用的文件描述符是最低的正整數尚未使用。這只是在unix。不能說Windows。

如果你需要讓代碼使用一個新的連接來代替舊的連接,那麼最好的辦法是增加一層間接尋址 - 創建一個套接字描述符數組,並將連接引用爲索引數組,而不是傳遞描述符本身。

1

不可以。您無法控制將生成的id。用這樣的假設編寫代碼具有經常失敗的危險。它的設計也很糟糕。

取決於套接字句柄的Intead,定義自己的結構/標識以識別連接。