WinSocket的问题:Recv返回-1,WSAGetLastError 返回 0

tingsky 2011-09-20 04:20:38
在windows socket编程中遇到这样一个问题:
当前的socket是阻塞模式,recv在一段较长时间(30S)没有接收到数据后,返回-1(SOCKET_ERROR),使用WSAGetLastError去获得错误值,返回的却是0.
这个时候是不是Recv的超时错误,对这样的错误,应该如何处理?
谢谢。
...全文
932 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjcapple 2011-11-28
  • 打赏
  • 举报
回复
顶起,呵呵呵,我也犯了同样的错误
tingsky 2011-09-21
  • 打赏
  • 举报
回复
终于明白问题发生在哪儿了。
我的伪代码是这样的:

nRet = Recv ()
if (nRet == -1)
{
// write log file. cause fail.
nErr = WSAGetLastError(); //Get error after write log file.
}


当Recv返回失败是没有立即去获取错误ID,而是在写日志文件后获取,而再写日志文件过程中产生了另一个异常。
SOCKET 超时返回:(nErrCode == WSAETIMEDOUT) || (nErrCode == WSAEWOULDBLOCK)

Thank You!
Eleven 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yigerengudu 的回复:]

抱歉,我个失误,WSAGetLastError返回值是 183, 不是 0.
[/Quote]
183: Cannot create a file when that file already exists.
????
不是这个吧
ouyh12345 2011-09-20
  • 打赏
  • 举报
回复
socket错误应该是100xx吧
tingsky 2011-09-20
  • 打赏
  • 举报
回复
抱歉,我个失误,WSAGetLastError返回值是 183, 不是 0.
oyljerry 2011-09-20
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20041201/11/3604775.html
fandh 2011-09-20
  • 打赏
  • 举报
回复
惭愧!网络以前只是接触过一点,所以,这种现象我也不是很确定!
隐约记得,超时的时候,WSAGetLastError得不到值!就这些!
tingsky 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fandh 的回复:]

应该是超时错误吧!
超时返回吧
[/Quote]
为什么要加个“吧”呢~~
fandh, 你能不能告诉我,recv超时是个什么现象吗?
fandh 2011-09-20
  • 打赏
  • 举报
回复
应该是超时错误吧!
超时返回吧

18,363

社区成员

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

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