看一下是哪个函数出错,
一般不会是缓冲区问题,
注意线程同步和socket函数的出错处理程序

解决方案 »

  1.   

    谢谢各位的参与,我今天准备给大家结账了,但我还是认为是接收缓冲区溢出,当你在2M的网上同时接收100个网页时,如果从socket的内部缓冲区读取的速度跟不上肯定会发生接收缓冲区溢出的现象,其实这时只要重新下载一遍就行了,但我现在要实现的是“尽力而为”的应用(搜索引擎),想用加大内部缓冲的办法来尽量避免接收缓冲区溢出的发生。
      

  2.   

    加大"缓冲区"不是一个合理的办法!!SOCKET的缓冲区受网卡物理缓冲区的大小限制.
    合理的直接缓冲区一般2K--5K,
    你要解决这个问题,可以编写一个"接受数据"的外包函数,
    用它来"黑箱"接受数据,对外而不在乎尺寸.
      

  3.   

    “如果从socket的内部缓冲区读取的速度跟不上肯定会发生接收缓冲区溢出的现象。”
    这是不可能的。这时tcp的流量控制将会起作用。
    如果发送端是同步方式工作,则发送函数会被阻塞;
    如果发送端是异步方式工作,则收不到发送消息。
    此时接收方如果是同步方式工作,则接收函数会立即返回;
    如果是异步方式工作,则会收到接收消息。
    当socket的内部缓冲区的数据被取走或部分取走后,发送端可以继续发送。
    tcp的流量控制绝对不会有问题。