select的问题?

ldsjlzy 2004-11-18 02:49:02
n1=select(socket_fd+1,&fdr,(fd_set *)0,(fd_set *)0,&timeout);
if (n1>0 && FD_ISSET(socket_fd,&fdr))
{
int nRet = recv(socket_fd,...)
}

以上代码,为什么select返回值大于0,而后接收数据时却为0呢(nRet = 0)?

...全文
244 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2004-11-18
  • 打赏
  • 举报
回复
recv可能有问题
ldsjlzy 2004-11-18
  • 打赏
  • 举报
回复
我是用循环调用select。
每次select的返回值要么就是0没有数据,要么就是大于0,没有SOCKET_ERROR的情况出现。
但是返回大于0时有时候却收不到数据recv返回为0,有时候却能正确收到数据。
danyueer 2004-11-18
  • 打赏
  • 举报
回复
M$说select函数第一个参数填不填都没关系,不过为了安全起见填个NULL好了。
baoxue10181018 2004-11-18
  • 打赏
  • 举报
回复
把socket_fd+1 改成0试一试,不过应该也没有关系的
9731boy 2004-11-18
  • 打赏
  • 举报
回复
UP.fd有时是非阻塞的,所以你要注意.另外.

你的recv对了吗?
ZHENG017 2004-11-18
  • 打赏
  • 举报
回复
select(socket_fd+1...);
socket_fd ???
select (1,...);
danyueer 2004-11-18
  • 打赏
  • 举报
回复
1 检查返回值 n1,假如 n1 == SOCKET_ERROR,则检查究竟出了什么错;

2 假如返回值不是SOCKET_ERROR,可能是你的Socket初始化有问题,把代码贴出来让大家进一步帮你解决。
Caps77 2004-11-18
  • 打赏
  • 举报
回复
不明白问题在哪里,我这里跟你几乎一样的代码不会有问题,你把socket_fd+1这个参数改成0试试~
sharkhuang 2004-11-18
  • 打赏
  • 举报
回复
其实你可以只设置可读哪位。
哦!是不是断开连接了?
ldsjlzy 2004-11-18
  • 打赏
  • 举报
回复
struct timeval timeout;
int n1;
fd_set fdr;
FD_ZERO(&fdr);
FD_SET(socket_fd,&fdr);
timeout.tv_sec=0;
timeout.tv_usec=1;
n1=select(socket_fd+1,&fdr,(fd_set *)0,(fd_set *)0,&timeout);
if (n1>0 && FD_ISSET(socket_fd,&fdr))
{
int nRet = recv(socket_fd,szRecvBuff,MAXBUFFLENGTH, 0);
}
看看有什么错?有时候n1返回大于0的情况下,有时候能正确收到数据,有时候收到0个数据。

danyueer 2004-11-18
  • 打赏
  • 举报
回复
你的fd设置是不是有问题?
Caps77 2004-11-18
  • 打赏
  • 举报
回复
看看recv后面的代码,应该是你的程序问题

18,356

社区成员

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

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