TCP send 发送大数据量的问题

本文介绍了一个使用C语言发送XML数据的TCP函数实现,包括错误处理和超时机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

int sendTCP(SOCKET& socketfd,TString strXml)
{
 int iContLen = strXml.length();
 int iSendLen = 0;
#ifndef WIN32

 fd_set scanSet;
 FD_ZERO(&scanSet);
 FD_SET(socketfd,&scanSet);

 time_t tBeg, tEnd;
 time(&tBeg);

 // 最多等待 20 毫秒
 struct timeval waitTime;
 waitTime.tv_sec  = 0;
 waitTime.tv_usec = 20000;
 int tmp = -1;


 while(iSendLen < iContLen)
 {
  int iLen  = send(socketfd,strXml.substr(iSendLen).c_str(),iContLen - iSendLen,0);
  if (iLen > 0 )
  {//
   iSendLen += iLen;
   //printf("\n send %d/%d",iSendLen,iContLen);
   //更新时间
   time(&tBeg);
  }
  else
  {
   //printf("\n send failed %d/%d",iSendLen,iContLen);
   time(&tEnd);
   if (tEnd - tBeg> 3)
   {//连续3秒不可写 认为出现错误
    printf("\n dTimeEnd - dTimeBeg  > 1");
    return -1;
   }
   usleep(200);
  }
 

 }
#endif
 return iSendLen;
   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值