int nZero=0;
setsockopt(socket,SOL_S0CKET,SO_RCVBUF,(char *)&nZero,sizeof(nZero));如上代码:
如果我设置了某个socket的接收缓冲区为0后,对方发送了数据,在肯定有数据到达后,我用recvfrom()接收数据为什么还可以接收得到,因为接收缓冲不是设置为0了吗,那我在没用recvfrom()函数之前这些数据存放在那里呢???不解!!!请高手解答。我上面是用UDP测试的,那TCP呢,会不会出现同样的情况???

解决方案 »

  1.   

    int nZero=0;
    你说这是将接收缓冲区设置为0的语句么???
    (char *)&nZero --》nZero有地址阿。没错
    sizeof(nZero)--》nZero有大小阿。sizeof(nZero) = 4(如果是32位机器的话)。
      

  2.   

    系统会自动为Socket开辟缓冲区,setsockopt是把缓冲区清零,不是把缓冲区大小设置成0
      

  3.   

    int nZero=0;
    setsockopt(socket,SOL_S0CKET,SO_RCVBUF,(char *)&nZero,sizeof(nZero));
    是把缓冲区清零???
    是我理解错了还是楼上说错了???
    我的理解是把接收缓冲区大小设置为0。
      

  4.   

    回复人: danyueer(淡月儿:清水上的足音) ( ) 信誉:115 :
    不懂就不要在这里乱说误导别人
      

  5.   

    应该是这样的:
    你将接收缓冲设为0后。客户机发送消息,
    服务器端:
    在你没有用recvfrom指定用户缓冲区之前,服务器拒收数据,导致客户端重发数据。
    一直到你用recvfrom指定用户缓冲区之后,此次发送才算完成.
      

  6.   

    另:用户缓冲区是由recv/send/recvfrom/sendto等指定的.
      

  7.   

    应该是直接拷贝到了用户指定的缓冲区里 而不是先拷贝到系统的缓冲区里
    danyueer(淡月儿:清水上的足音) 好象说错了
      

  8.   

    有两个缓冲区,一个是系统自动给SOCKET分配的,一个是用户分配的。楼主是把系统的缓冲区的大小设为0;当你收的时候会有一个用户缓冲区的。
      

  9.   

    我应听那个呢?? ->>xing_star(轻骑兵) 
    大家说 lonenomad(流浪汉) 说得对吗?
    高手出面吧!