2009-12-21 54 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