我分配了一个很大的缓冲区100k,send 函数能不能够把它发送完,是不是send返回值是100k,就证明一定发送成功?
如果内存少于100k怎样分配缓冲?

解决方案 »

  1.   

    单次发送一般为1K左右,广域网我做过测试。
    更改发送缓冲区不代表可以增加一次发送的字节数,两者没有太大的联系。缓冲区只是用来排队等待要发送的包。
    send函数返回值为多少,代表你发送了多少字节。
    如果要发送更多的字节,你把所有的发送都写成循环发送。(这是个好习惯)int iSend //要发送的字节数
    char *pb  //要发送的缓冲区
    int j = 0;
    for(;;)
    {
      int r = send(skt, pb+j, iSend-j, 0);
      if (r == SOCKET_ERROR) return;
      j += r;
      if(j == iSend) break;
    }
      

  2.   

    如果WSAGetLaseError没有返回错误,send的返回值等于你要发送的数据大小就可以认定你发送成功。但不要指望那么大小的数据一次调用send就能成功,要象楼上那样用循环。因为局域网帧和IP包大小,网络带宽都限定了发送数据的能力,所以要用循环。