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,如果已满那么我如何删除缓冲区

解决方案 »

  1.   

    不知道你的缓冲区是buf还是系统的?你的len要减去以发送的字节总数
      

  2.   

    recv倒是可以判断,send好像不太好办。nSelectRet=::select(0,  NULL, NULL,&fdw, &tv01);//检查可写状态改为nSelectRet=::select(0,  NULL, &fdw, NULL,&tv01);
      

  3.   

    你现在需要确定是否错误真正出现的位置,如果是缓冲区的问题,很可能是SOCKET的队列问题。但若根本就没有发送成功过,也不应该是这个问题。可以试着查查是不是这方面的问题。