TCP套接字设置选项 TCP_NODELAY 定义在哪个头文件

<<UNIX网络编程>> 第三版 卷一

7.3节:

#include <netinet/tcp.h>  /* for TCP_XXX defines */

7.4节:

    下面的套接字选项是由TCP已连接套接字从监听套接字继承来的: 

     SO_DEBUG    SO_DONTROUTE    SO_KEEPALIVE    SO_LINGER    SO_OOBINLINE    SO_RECVBUF

     SO_RCVLOWAT SO_SNDBUF        SO_SNDLOWAT    TCP_MAXSEG    TCP_NODELAY

因为 accept 一直要到TCP层完成三路握手后才会给服务器返回已连接套接字,如果想在三路握手完成时确保这些套接字选项中的某一个是给已连接套接字设置的,那么我们必须先给监听套接字设置该选项。

我需要在代码执行到的时候立即发包,给出一个linux C语言的demo。#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main() { int sockfd; struct sockaddr_in server_addr; const char *message = "Immediate TCP packet!"; int flag = 1; // 启用TCP_NODELAY的标记 // 创建TCP socket if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("Socket creation failed"); exit(EXIT_FAILURE); } // 设置服务器地址(替换为目标服务器地址) memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8080); // 目标端口 if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) { perror("Invalid address"); close(sockfd); exit(EXIT_FAILURE); } // 连接到服务器 if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { perror("Connection failed"); close(sockfd); exit(EXIT_FAILURE); } // 设置TCP_NODELAY选项 if (setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(flag)) < 0) { perror("TCP_NODELAY setting failed"); close(sockfd); exit(EXIT_FAILURE); } printf("TCP_NODELAY enabled, sending immediately\n"); // 立即发送数据 if (send(sockfd, message, strlen(message), MSG_NOSIGNAL) < 0) { perror("Send failed"); } else { printf("Sent: \"%s\"\n", message); } // 关闭socket close(sockfd); return 0; } 前文我询问过TCP立即发包的demo,我认为我设备当前已经与PC进行了TCP连接,,只需要修改发包配置和发包
最新发布
01-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tobybo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值