在这个c++ TCP客户端中,我在哪里设置TCP_NODELAY ?

Where do I set TCP_NODELAY in this C++ TCP Client?

本文关键字:TCP 设置 在哪里 NODELAY c++ 客户端      更新时间:2023-10-16

我在哪里设置TCP_NODELAY在这个c++ TCP客户端?

    // Client socket descriptor which is just integer number used to access a socket
    int sock_descriptor;
    struct sockaddr_in serv_addr;
    // Structure from netdb.h file used for determining host name from local host's ip address
    struct hostent *server;
    // Create socket of domain - Internet (IP) address, type - Stream based (TCP) and protocol unspecified
    // since it is only useful when underlying stack allows more than one protocol and we are choosing one.
    // 0 means choose the default protocol.
    sock_descriptor = socket(AF_INET, SOCK_STREAM, 0);
    if (sock_descriptor < 0)
        printf("Failed creating socketn");
    bzero((char *) &serv_addr, sizeof(serv_addr));
    server = gethostbyname(host);
    if (server == NULL) {
        printf("Failed finding server namen");
        return -1;
    }
    serv_addr.sin_family = AF_INET;
    memcpy((char *) &(serv_addr.sin_addr.s_addr), (char *) (server->h_addr), server->h_length);
    // 16 bit port number on which server listens
    // The function htons (host to network short) ensures that an integer is
    // interpreted correctly (whether little endian or big endian) even if client and
    // server have different architectures
    serv_addr.sin_port = htons(port);
    if (connect(sock_descriptor, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
        printf("Failed to connect to servern");
        return -1;
    } else
        printf("Connected successfully - Please enter stringn");

TCP_NODELAY是setsockopt系统调用的选项:

#include <netinet/tcp.h>
int yes = 1;
int result = setsockopt(sock,
                        IPPROTO_TCP,
                        TCP_NODELAY,
                        (char *) &yes, 
                        sizeof(int));    // 1 - on, 0 - off
 if (result < 0)
      // handle the error

设置Nagle缓冲。只有当你真正知道自己在做什么的时候,才应该打开这个选项