Disable TCP Delayed ACKs

前端 未结 3 977
一向
一向 2020-12-08 07:50

I have an application that receives relatively sparse traffic over TCP with no application-level responses. I believe the TCP stack is sending delayed ACKs (based on glanci

相关标签:
3条回答
  • 2020-12-08 08:29

    The accepted answer has a bug, it should be

    flags = 0;
    flglen = sizeof(flags);
    setsockopt(sfd, SOL_TCP, TCP_QUICKACK, &flags, flglen)
    

    (SOL_TCP, not IPPROTO_TCP)

    Post here in case someone need it.

    As @damolp suggested, it is not a bug. Keep it here for record.

    0 讨论(0)
  • 2020-12-08 08:33

    You could setsockopt(sockfd, IPPROTO_TCP, TCP_QUICKACK, (int[]){1}, sizeof(int)) after every recv you perform. It appears that TCP_QUICKACK is only reset when there is data being sent or received; if you're not sending any data, then it will only get reset when you receive data, in which case you can simply set it again.

    You can check this in the 14th field of /proc/net/tcp; if it is not 1, ACKs should be sent immediately... if I'm reading the TCP code correctly. (I'm not an expert at this either.)

    0 讨论(0)
  • 2020-12-08 08:35

    I believe using the setsockopt() function you can use the TCP_NODELAY which will disable the Nagle algorithm.

    Edit Found a link: http://www.ibm.com/developerworks/linux/library/l-hisock.html

    Edit 2 Tom is correct. Nagle does not affect Delayed ACKs.

    0 讨论(0)
提交回复
热议问题