Windows 围绕winsock的BSD套接字兼容包装器?

Windows 围绕winsock的BSD套接字兼容包装器?,windows,linux,sockets,network-programming,winsock,Windows,Linux,Sockets,Network Programming,Winsock,我正在尝试将Linux应用程序移植到Windows。应用程序并不太复杂,使用了所有相当标准的代码,几乎没有外部依赖关系。主要的依赖项是libelf(在mingw下可以很好地编译)、pthreads(似乎有一个win32版本可用)和套接字。主要问题是套接字…Windows提供WinSock,但它与所有*尼克斯使用的BSD(Berkeley)套接字不完全兼容。我想知道的是,是否有人在windows上编写了一个包装器,公开BSD套接字API,但在后端调用Winsock以简化移植?我建议使用。它是为将*

我正在尝试将Linux应用程序移植到Windows。应用程序并不太复杂,使用了所有相当标准的代码,几乎没有外部依赖关系。主要的依赖项是libelf(在mingw下可以很好地编译)、pthreads(似乎有一个win32版本可用)和套接字。主要问题是套接字…Windows提供WinSock,但它与所有*尼克斯使用的BSD(Berkeley)套接字不完全兼容。我想知道的是,是否有人在windows上编写了一个包装器,公开BSD套接字API,但在后端调用Winsock以简化移植?

我建议使用。它是为将*nixes(包括套接字、文件IO等)带到windows而构建的。

在大多数情况下,您只需确保在开始和结束时调用WSAStartup()和WSACleanup(),否则,基本BSD套接字将转换得非常好。您可以创建一些静态全局变量,用于检查套接字调用的每次调用,并相应地调用WSAStartup()和WSACleanup()。至于poll()。。。嗯,选择()很容易理解。

如果可能的话,我想避免使用cygwin,使用它有很多缺点。这个应用程序在mingw32中编译得很好,除了套接字,BSD套接字与winsock非常相似,所以我的想法是它们之间的包装转换不会太复杂,这可能是已经存在的东西。cygwin确实有一些“包袱”。源代码确实实现了有问题的包装器。尽管您可能会惊讶Winsock2.h与BSD的距离有多近(大多数情况下)。从消除编译器错误的角度来看,包装器似乎还可以。但考虑到端口的易用性,额外的一层可能不值得。我做了一个端口几乎十年了,据我回忆,它几乎不花时间,主要是查找/替换所有进程。微软有一个关于它的指南,你可能已经看到了:谢谢你的提示,我想它们有些帮助。但我更希望有人已经为我编写了代码,这样我就不必实现所有这些小补丁来让它工作。