Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

c++

c

sockets

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

    // 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 socket\n");

    bzero((char *) &serv_addr, sizeof(serv_addr));

    server = gethostbyname(host);

    if (server == NULL) {
        printf("Failed finding server name\n");
        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 server\n");
        return -1;
    } else
        printf("Connected successfully - Please enter string\n");
like image 451
BAR Avatar asked Nov 16 '25 07:11

BAR


1 Answers

TCP_NODELAY is option given to setsockopt system call:

#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

This is to set Nagle buffering off. You should turn this option on only if you really know what you are doing.

like image 157
4pie0 Avatar answered Nov 17 '25 20:11

4pie0