以下是一个禁用Nagle算法的Linux TCP服务器的例程:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>

int main() {
    int sockfd, newsockfd, portno;
    socklen_t clilen;
    char buffer[256];
    struct sockaddr_in serv_addr, cli_addr;
    int n;

    // 创建套接字
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        perror("ERROR opening socket");
        exit(1);
    }

    // 设置禁用Nagle算法
    int flag = 1;
    int result = setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int));
    if (result < 0) {
        perror("ERROR setting TCP_NODELAY");
        exit(1);
    }

    // 初始化服务器地址
    bzero((char *) &serv_addr, sizeof(serv_addr));
    portno = 12345;
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(portno);

    // 绑定地址到套接字
    if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
        perror("ERROR on binding");
        exit(1);
    }

    // 监听连接请求
    listen(sockfd, 5);
    clilen = sizeof(cli_addr);

    // 等待客户端连接
    newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
    if (newsockfd < 0) {
        perror("ERROR on accept");
        exit(1);
    }

    // 接收和发送数据
    bzero(buffer, 256);
    n = read(newsockfd, buffer, 255);
    if (n < 0) {
        perror("ERROR reading from socket");
        exit(1);
    }
    printf("Here is the message: %s\n", buffer);

    n = write(newsockfd, "I got your message", 18);
    if (n < 0) {
        perror("ERROR writing to socket");
        exit(1);
    }

    // 关闭套接字
    close(newsockfd);
    close(sockfd);

    return 0;
}

在上述代码中,通过调用setsockopt()函数将TCP_NODELAY选项设置为1,即禁用Nagle算法。这将导致TCP套接字禁用延迟发送,即使只有一个字节的数据也会立即发送。请注意,此选项仅在创建套接字后才能设置,因此在调用socket()函数之后立即设置它。

在服务器代码中,首先创建套接字,然后设置禁用Nagle算法。然后,绑定服务器地址到套接字,并开始监听连接请求。一旦有客户端连接,服务器将接收数据并发送回客户端。最后,关闭套接字。

请注意,为了简化示例,省略了错误处理和其他辅助函数。在实际的应用程序中,应该进行错误检查和处理

Linux tcp server 禁用Nagle算法例程

原文地址: https://www.cveoy.top/t/topic/hOS4 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录