★怎么检测SOCKET的缓冲区是否有数据到达?

tnswy 2003-12-18 01:03:25
怎么检测SOCKET的缓冲区是否有数据到达?
请指点。
...全文
205 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sboom 2003-12-19
  • 打赏
  • 举报
回复
什么BUG??
zero1977 2003-12-19
  • 打赏
  • 举报
回复
fd_set fd;
FD_ZERO(&fd);
FD_SET(sockfd, &fd);

struct timeval timet;
timet.tv_sec = timeout;
timet.tv_usec = 0;

int i = select((int)sockfd + 1, &fd, NULL, NULL, &timet);
if( i <= 0 )
{
#ifndef _WIN32
if( errno == EINTR )
continue;
#endif
return i;
}

if( !FD_ISSET(sockfd, &fd))
return -1;
// 有数据来了~~~~

OnProcess(sockfd)
sevencat 2003-12-19
  • 打赏
  • 举报
回复
看到老外这么说的,我自己并没有碰到过这个BUG。
ydfok 2003-12-19
  • 打赏
  • 举报
回复
To: sevencat(七猫) ( )
能否详细解释一下?
csgo 2003-12-19
  • 打赏
  • 举报
回复
看看返回结果
sevencat 2003-12-19
  • 打赏
  • 举报
回复
MSG_PEEK最好不要用,这个在WIN平台是有BUG的。
sboom 2003-12-19
  • 打赏
  • 举报
回复
用 wsaasyncselect(...) 注册 FD_READ 消息。
tiantian_200 2003-12-19
  • 打赏
  • 举报
回复
同意zero1977(ZERO) 说法
但是不一定是数据来了,也有可能对方关闭套接口或网络断了
sboom 2003-12-18
  • 打赏
  • 举报
回复
用 MSG_PEEK 标志
int recv (sock,buff,len,MSG_PEEK);

sharkhuang 2003-12-18
  • 打赏
  • 举报
回复
select
catyou 2003-12-18
  • 打赏
  • 举报
回复
用select与ioctlsocket联合检测
jian 2003-12-18
  • 打赏
  • 举报
回复
select或者poll调用
sevencat 2003-12-18
  • 打赏
  • 举报
回复
非堵塞套接字,读一下试试看就知道了。
Semigod 2003-12-18
  • 打赏
  • 举报
回复
FD_READ

18,363

社区成员

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

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