網絡編程noob在這裏,套接字API:爲什麼`connect`不返回描述符?
我很困惑的行爲accept
和connect
套接字函數。在大多數編程語言中,這些函數的包裝返回不同類型的值:accept
返回一個新的描述符,我們可以使用它來發送/接收數據,但connect
不返回任何內容(或返回錯誤代碼)。
對我來說,看起來像connect
也應該返回一個描述符。它們都在兩個套接字之間打開一個通道,但只有其中一個功能返回與遠程套接字進行通信的有用信息。
這會影響我構建程序的方式。例如,我可以很容易地產生一個新的工人/線程/等。對於每個傳入的連接,但對於我使用connect
創建的每個連接都不是很容易,因爲在這種情況下我沒有新的描述符(所以我不能使用recv
和send
而不做一些簿記)
任何人都可以解釋我爲什麼這樣工作?
我想原因是,由於socket
包裝的編程語言遵循BSD API緊密合作,並在這種情況下,我的問題是:爲什麼BSD套接字以這種方式工作?當前的實現會導致不必要的複雜程序或冗餘套接字。我要麼需要做更多的簿記(導致更復雜的程序),要麼爲每個出站連接創建一個新的套接字(導致冗餘套接字)。
謝謝。