请教怎么设置非阻塞套接字的数据缓冲区不可用

unhappyless 2008-12-05 03:47:44


int val = send(pClient->m_socket, pClient->m_data.buf, nSendlen,0);
//处理返回错误
if (SOCKET_ERROR == val)
{
int nErrCode = WSAGetLastError();
if (nErrCode == WSAEWOULDBLOCK)//发送数据缓冲区不可用
{
continue;
}else if ( WSAENETDOWN == nErrCode ||
WSAETIMEDOUT == nErrCode ||
WSAECONNRESET == nErrCode)//客户端关闭了连接
{


书上说数据缓冲区不可用时,WSAGetLastError()得到的是 WSAEWOULDBLOCK ,那什么样的数据缓冲区算不可用?

做个试验:在阻塞模式下 memset(pClient->m_data.buf,0,len),还可发送,应该能证明缓冲区可不可用和这内容无关

那这函数是怎么判断的?
...全文
99 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhs_lh04 2008-12-08
  • 打赏
  • 举报
回复
也要检测此返回码,继续发送或者接收
unhappyless 2008-12-08
  • 打赏
  • 举报
回复
那客户端那边 recv 时候 WSAEWOULDBLOCK 又是什么情况?
xhs_lh04 2008-12-05
  • 打赏
  • 举报
回复
非阻塞模式时,当缓冲区满或者缓冲区空闭小于要发送数据大小时立即返回失败,返回码就是WSAEWOULDBLOCK,此时应该继续发送
hityct1 2008-12-05
  • 打赏
  • 举报
回复
你的是非阻塞模式吧?
unhappyless 2008-12-05
  • 打赏
  • 举报
回复
请教,什么样情况算缓冲区不可用?

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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