Mik*_*ley 7 sockets linux windows porting winsock
我有一个使用Winsock进行网络连接的程序,我们现在的一个要求就是将程序移植到Linux上.阻止我们这样做的唯一因素是Winsock.
我的问题是:我可以轻松地将其移植到Linux实现中吗?
是否有任何陷阱我应该注意,如果我只是包含适当的头文件,我必须要处理什么样的事情?
谢谢你的帮助!
我发布了代码,但由于法律原因,我不能不幸.但是,我们的代码确实使用了以下内容:
WSAStartup(..)
WSACleanup(..)
Socket(..)
sendto(..)
recvfrom(..)
ioctlsocket(..)
setsocketopt(..)
Run Code Online (Sandbox Code Playgroud)
基于该功能列表,事情应该或多或少地起作用.添加#if _WIN32调用WSAStartup和WSACleanup(Linux等效是不做任何事情,套接字库自动初始化).
在设置套接字选项时,您可能还需要一些与操作系统相关的代码,其中一些是相同的,有些则不是,类型可能不同.
这取决于您是否使用任何特定于Windows的网络功能,或者您只是主要使用大多数与BSD兼容的API.
因此,如果您使用重叠的I/O和I/O完成端口以及Winsock API的其他高级部分,那么移植将非常困难,如果您只是使用BSD兼容的东西,那么应该很容易写一个薄的翻译层,甚至只是在Windows特定的ifdef中有winsock启动和关闭的东西......
这可能会有所帮助:http://tangentsoft.net/wskfaq/articles/bsd-compatibility.html