将Winsock移植到Linux套接字
我有一个使用Winsock进行网络连接的程序,我们现在的一个要求是将程序移植到Linux上。唯一阻止我们做这件事的是Winsock。将Winsock移植到Linux套接字
我的问题是:我可以轻松地将此转换为Linux实现吗?
有没有我应该知道的陷阱,如果我只是包含适当的头文件,我必须确定要处理什么样的事情?
感谢您的帮助!
我会发布代码,但我不能不幸,由于法律原因。 但是,我们的代码并使用以下命令:
WSAStartup(..)
WSACleanup(..)
Socket(..)
sendto(..)
recvfrom(..)
ioctlsocket(..)
setsocketopt(..)
这将取决于您是否使用任何Windows特定的网络功能,或者如果您只是使用大多数BSD兼容的API。因此,如果您使用重叠的I/O和I/O完成端口以及Winsock API的其他高级部分,那么事情将非常难以移植,如果您只是使用BSD兼容的东西,那么它应该很容易写一个薄转换层,甚至只是有一个特定的窗口内的ifdef在Winsock的启动和关闭的东西...
这可能会帮助:http://tangentsoft.net/wskfaq/articles/bsd-compatibility.html
没有看到代码,这很难说是多么容易。但你应该能够将winsock调用替换为sys/sockets.h中的模拟。
使移植困难的唯一调用是WSA *调用。
调用WSAStartup() - > NOP WSACleanup() - > NOP
插座/ setsockopt的 - >插座/ setsockopt的
在* nix中,插座是默认阻断,它不是必要的或者可以使用奇怪的setsockopt调用它来摆弄它。
ioctlsocket - > IOCTL
在* nix中,我们不太喜欢异步插座和喜欢使用select()系统调用。
----这个答案的休息似乎只适用于Win95的兼容的Winsock ----
不幸的是作为原始套接字()中的Winsock在某些情况下被打破,你可能使用WSASocket()和所以必须转换这些电话。
基础的功能清单上,事情应该更或更少只是工作。在WSAStartup
和WSACleanup
的调用周围添加#if _WIN32
(相当于linux没有做任何事情,套接字库自动初始化)。
设置套接字选项时,您可能还需要一些与操作系统相关的代码,其中一些是相同的,有些不是,并且类型可能不同。
我们的代码使用套接字(),我发布了哪些函数用于代码中,因为我无法发布实际的代码。 – 2011-01-06 17:25:01