Chinaunix

标题: CENTOS 7 64 位 NAGLE没法关闭? [打印本页]

作者: aaadddzxc    时间: 2015-07-30 15:50
标题: CENTOS 7 64 位 NAGLE没法关闭?
永远都沾包?必须自定义头?

    int nNoNagle = 1;
    if (SOCKET_ERROR == setsockopt(stl_MapIterator->second.hSocket,IPPROTO_TCP,TCP_NODELAY,(const char*)&nNoNagle,sizeof(int)))
    {
        return FALSE;
    }


发送的时候设置 ,没有返回错误,但是我接受到的包还是被组合的,比如 send 20 个字节,但是recv 是40 有两个数据包被组合了。。。这是怎么回事?
作者: hellioncu    时间: 2015-07-30 15:55
这是两码事
作者: aaadddzxc    时间: 2015-07-30 15:59
我想发送一个20字节的包 recv 就接受 20字节应该如何作呢?
作者: hellioncu    时间: 2015-07-30 16:13
aaadddzxc 发表于 2015-07-30 15:59
我想发送一个20字节的包 recv 就接受 20字节应该如何作呢?


你只能控制发生端,不能控制接收端。接收端收到后自己拆分吧。

要么用UDP,两边是一致的,满足你的需求,就是丢的概率大一些
作者: aaadddzxc    时间: 2015-07-30 16:33
求普及下 大神,TCP NAGLE 难道不是引起这个问题的吗? NAGLE是引起延迟问题的?
作者: hellioncu    时间: 2015-07-30 16:58
aaadddzxc 发表于 2015-07-30 16:33
求普及下 大神,TCP NAGLE 难道不是引起这个问题的吗? NAGLE是引起延迟问题的?


这个只是发生端不粘包了,给数据就发,但是接收端还是有可能一次recv收到多个或者部分数据
作者: cokeboL    时间: 2015-07-30 16:59
只要记着,tcp没有包,就好了
作者: windoze    时间: 2015-07-31 01:04
你需要20字节就在接收端读20字节好了,你非要读40个字节干嘛呢?
搞不懂是谁创造出“沾包”这种概念来的?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2