0

谁能告诉我为什么以下代码大多数时候返回 0 。一段时间返回 1. 我在 3G 网络中测试它。那是让播放器有时播放有时暂停。我很困惑?

fd_set  readSet;
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 250*1000;
FD_ZERO( &readSet );
FD_SET( http->fd, &readSet );
ret = select(http->fd + 1,&readSet,0,0,&tv);
4

1 回答 1

1

您在读取时设置了 250 毫秒的超时,因此select()当超时到期而没有接收到任何数据时返回。这是预期的行为,尤其是在可能受到高延迟的蜂窝连接上。

请允许我在这里提出一个更好的方法。使用CFSocket包装文件句柄,然后将其作为事件源添加到应用程序的运行循环中。这将select()完全消除对的需要。

于 2013-09-26T02:28:41.277 回答