2009-12-21 108 views
0

我正試圖將Linux應用程序移植到Windows。該應用程序不是太複雜,使用所有相當標準的代碼,只需很少的外部依賴。主要依賴是libelf(在mingw下編譯得很好),pthreads(似乎有一個win32版本可用)和套接字。主要問題是套接字... Windows提供了WinSock,但這與所有* nixes使用的BSD(Berkeley)套接字不是100%兼容的。我想知道的是,是否有人在暴露了BSD套接字API的窗口上編寫了封裝器,但在後端調用Winsock以便輕鬆移植?winsock的BSD套接字兼容包裝?

回答

1

我會推薦使用cygwin.dll。它用於將* nixes引入到包括套接字,文件IO等窗口中。

+1

我想避免cygwin如果可能的話,使用它有很多缺點。這個應用在mingw32中編譯得很好,除了套接字,BSD套接字與winsock非常相似,所以我的想法是在它們之間轉換的包裝不會太複雜,並且這可能已經存在 – davr

+0

是的,cygwin會帶着一些「行李」。源代碼確實實現了有問題的包裝。雖然你會驚訝Winsock2.h與BSD有多接近(大多數情況下)。從擺脫編譯器錯誤的角度來看,包裝可能看起來沒問題。但額外的層面可能不值得考慮港口是多麼容易。我做了一個差不多十年的港口,從我記得以後幾乎沒有時間,大部分發現/替換所有進程。 MS有一個指導,你可能已經看到:http://msdn.microsoft.com/en-us/library/ms738562(VS.85).aspx – MandoMando

1

大多數情況下,您只需確保在開始和結束時調用WSAStartup()和WSACleanup(),否則,基本的BSD套接字將非常好地轉換。您可以創建一些靜態全局變量,每次調用套接字調用時都會檢查它們,並相應地調用WSAStartup()和WSACleanup()。至於poll()...以及它很容易轉換爲select()。

+0

感謝您的提示,我想他們有些幫助。但我更希望有人已經爲我編寫了代碼,所以我不必實施所有這些小修補程序來實現它。 – davr