为什么select()后面非要sleep()不可?

dot99 2004-03-09 07:25:49


代码如下:

NonBlock = 1;
ret = ioctlsocket(sock, FIONBIO, &NonBlock);
checkErr(ret, "ioctlsocket");
for(;;) {
Sleep(50); //非要Sleep(),否则下面ret为0,为什么?
FD_ZERO(&fdread);
FD_SET(sock, &fdread);
ret = select(0, &fdread, 0, 0, &timeout);
checkErr(ret, "select");
if (ret > 0 && FD_ISSET(sock, &fdread)) {
ret = recv(sock, buf, buf_size, 0);
buf[ret] = '\0';
printf("Recieve from server:\n%s\n", buf);
if (strncmp(buf, "end", 3) == 0)
break;
}
FD_ZERO(&fdwrite);
FD_SET(sock, &fdwrite);
ret = select(0, 0, &fdwrite, 0, &timeout);
checkErr(ret, "select");
if (ret > 0 && FD_ISSET(sock, &fdwrite)) {
memset(buf, '\0', buf_size);
printf("cmd/> ");
gets(buf);
ret = send(sock, buf, strlen(buf), 0);
checkErr(ret, "send");
printf("message sent...\n");
}
}


如果不Sleep()的话,要等到下次发送数据后,才能得到上次服务器端传来的消息.
另外select里面的timeval参数到底是什么用?阻塞等待,还是非阻塞?
不管timeval设置为多少,最后,还是要在循环中Sleep(50).

望详细解答


谢谢,
dot99
...全文
181 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧