ioctlsocket调用的问题

漂白猪 2008-07-16 03:02:02

if ( ioctlsocket(hSocket, FIONREAD, &nBytes) != 0 )
{
continue;
}

if ( nBytes == 0)
{
//进了这个分支,是发生了什么错误
}
...全文
182 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Conry 2008-07-16
  • 打赏
  • 举报
回复
说明没有数据可读,msdn里面说的很清楚啊
thirddata 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yourlin 的回复:]
那这里应该在if里面写上continue?
让线程进行下一次循环?
不断的接收数据?
[/Quote]
我明白你的意图了,你主要是想检测有没有数据是吧?如果是这样的话,把socket设为non-blocking模式,让后用select进行检测,select里面加一定的超时时间,这样的代码才是合理和有效的,你现在那样写有很大的性能问题。
漂白猪 2008-07-16
  • 打赏
  • 举报
回复
那这里应该在if里面写上continue?
让线程进行下一次循环?
不断的接收数据?
thirddata 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yourlin 的回复:]
ioctlsocket(hSocket, FIONREAD, &nBytes)
这个返回0
就是有可读数据吧?

怎么会缓冲区长度是0?

我在下面这个if里面把socket关掉了。。。

我之前连接都已经建立了

以上是在socket接收的线程函数里面
[/Quote]
另外你要是检查有没有数据可读,怎么用这个函数呢,为什么不使用select之类的函数呢?
thirddata 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yourlin 的回复:]
ioctlsocket(hSocket, FIONREAD, &nBytes)
这个返回0
就是有可读数据吧?

怎么会缓冲区长度是0?

我在下面这个if里面把socket关掉了。。。

我之前连接都已经建立了

以上是在socket接收的线程函数里面
[/Quote]

ioctlsocket函数只是检测啊,说明你的客户端没有数据可收,当然nBytes等于0了,这很正常啊。
漂白猪 2008-07-16
  • 打赏
  • 举报
回复
补充一下,上面的情况发生在客户端
漂白猪 2008-07-16
  • 打赏
  • 举报
回复
ioctlsocket(hSocket, FIONREAD, &nBytes)
这个返回0
就是有可读数据吧?

怎么会缓冲区长度是0?

我在下面这个if里面把socket关掉了。。。

我之前连接都已经建立了

以上是在socket接收的线程函数里面
thirddata 2008-07-16
  • 打赏
  • 举报
回复
补充上面,没有数据可读的情况下,也会进入那个分支
thirddata 2008-07-16
  • 打赏
  • 举报
回复
客户端端来链接了,网络断开了

18,356

社区成员

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

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