【发布时间】:2015-10-12 12:45:26
【问题描述】:
我正在将基于套接字的应用程序从 Linux 移植到 Windows CE 6.0。我遇到了一行代码,它设置了接收超时的套接字选项。
struct timeval timeout = 200;
timeout.tv_usec = 200000;
setsockopt(mySock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, (socklen_t) sizeof(timeout));
我搜索了可能的移植实现,发现这两个线程相关。 setsockopt() with RCVTIMEO is not working in windows mobile5 和 Set timeout for winsock recvfrom
将接收超时设置为200ms后,调用recv()从远程IP(发送方)接收数据。 第一个链接清楚地解释了生成一个线程并等待它,但是对于我的情况来说,200 毫秒看起来太少了,因为发送者发送了大约 10 秒。 第二个链接的 select() 建议是我添加到代码中的,但行为非常不一致。有时它没有收到任何数据包,有时是 1 个或更多。但是现有的实现在 Linux 上运行良好。
我是否以正确的方式进行移植?谁能指出一个可能的错误或提出建议?
谢谢!
【问题讨论】:
-
您是否考虑过添加一些错误检查?例如到
setsockopt()通话?
标签: c sockets windows-ce winsock2