如何在使用socket的send之前判断缓冲区是否已满

vivitor 2004-05-07 02:04:43
TIMEVAL tv01 = {0, 1};//1ms钟延迟,实际为9-10毫秒
int nSelectRet;
int nErrorCode;
while(1) {
FD_SET fdw = {1, sListen};
nSelectRet=::select(0, NULL, NULL,&fdw, &tv01);//检查可写状态

if(SOCKET_ERROR==nSelectRet)
{
nErrorCode=WSAGetLastError();
TRACE("select write status errorcode=%d",nErrorCode);
//::closesocket(sConnect);
//goto 重新连接(客户方),或服务线程退出(服务方);
break;
}
if(nSelectRet==0) //超时发生,缓冲满或网络忙
{
//继续查写状态或查读状态
continue;
}
else
{
//发送
sn=send(s,buf,len,flags);
break;
}
}

我的代码如上,为什么一运行就是无法到发送那里呢?
rt,如果已满那么我如何删除缓冲区
...全文
573 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
comman_wang 2004-05-07
  • 打赏
  • 举报
回复
你现在需要确定是否错误真正出现的位置,如果是缓冲区的问题,很可能是SOCKET的队列问题。但若根本就没有发送成功过,也不应该是这个问题。可以试着查查是不是这方面的问题。
xiaohyy 2004-05-07
  • 打赏
  • 举报
回复
recv倒是可以判断,send好像不太好办。。。。

nSelectRet=::select(0, NULL, NULL,&fdw, &tv01);//检查可写状态

改为nSelectRet=::select(0, NULL, &fdw, NULL,&tv01);
yhqs540 2004-05-07
  • 打赏
  • 举报
回复
看看结束符的位置
abrams2004 2004-05-07
  • 打赏
  • 举报
回复
不知道你的缓冲区是buf还是系统的?你的len要减去以发送的字节总数

18,355

社区成员

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

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