我有一个使用Winsock进行网络连接的程序,我们现在的一个要求就是将程序移植到Linux上.阻止我们这样做的唯一因素是Winsock.
我的问题是:我可以轻松地将其移植到Linux实现中吗?
是否有任何陷阱我应该注意,如果我只是包含适当的头文件,我必须要处理什么样的事情?
谢谢你的帮助!
我发布了代码,但由于法律原因,我不能不幸.但是,我们的代码确实使用了以下内容:
WSAStartup(..)
WSACleanup(..)
Socket(..)
sendto(..)
recvfrom(..)
ioctlsocket(..)
setsocketopt(..)
Run Code Online (Sandbox Code Playgroud) 我想检测是否在Windows中的stdin上有输入等待.
我在Linux上使用以下通用结构:
fd_set currentSocketSet;
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 0;
int result = 1;
while (result > 0){
FD_ZERO(¤tSocketSet);
FD_SET(STDIN, ¤tSocketSet);
result = select(STDIN+1, ¤tSocketSet, NULL, NULL, &tv);
if (result == -1){
printf("Network Error -- select errored with id=%d.\n", errno);
return;
} else if (result > 0){
//...do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我不想处理像kbhit这样的键盘和键盘功能.我想要一种方法来做我所要求的.我也不希望第三方库也这样做,我希望通过本机Windows库调用来获得答案.
注意#2:在Windows上,上面的代码失败,窗口错误代码为10038"尝试对不是套接字的东西进行操作",这可能意味着窗口不支持在STDIN上选择.