我观察从服务器到客户端的TCP超时。
当TCP三次握手完成后,客户端长时间不做任何操作。
TCP会超时多少次会话?
我查阅了RFC 793文档,3.8接口:
如果有超时,则允许调用者为所有提交给TCP的数据设置超时。如果数据在超时期间未成功传递到目标位置,则TCP将中止连接。
当前全局默认值为五分钟。
以下是捕获的数据包连接, 已过去10分钟以上,仍未发生TCP断开连接。
我是否有什么误解?
操作系统:Ubuntu 20
以下是我的测试代码。
客户端代码:
我查阅了RFC 793文档,3.8接口:
如果有超时,则允许调用者为所有提交给TCP的数据设置超时。如果数据在超时期间未成功传递到目标位置,则TCP将中止连接。
当前全局默认值为五分钟。
以下是捕获的数据包连接, 已过去10分钟以上,仍未发生TCP断开连接。
我是否有什么误解?
![enter image description here](https://istack.dev59.com/Mh8EQ.webp)
以下是我的测试代码。
客户端代码:
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, char *argv[]){
int socket_desc;
struct sockaddr_in server;
socket_desc = socket(AF_INET, SOCK_STREAM, 0);
if(socket_desc == -1){
printf("Socket failed\n");
}
server.sin_addr.s_addr = inet_addr("192.168.88.88");
server.sin_family = AF_INET;
server.sin_port = htons(8888);
if(connect(socket_desc, (struct sockaddr *)&server, sizeof(server)) <0){
printf("Connect failed\n");
} else{
printf("Connected\n");
while(0); // When connected, do not anything.
return 0;
}
服务器代码:
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, char *argv[]){
int socket_desc, new_socket, c;
struct sockaddr_in server;
socket_desc = socket(AF_INET, SOCK_STREAM, 0);
if(socket_desc == -1){
printf("Socket failed\n");
}
server.sin_addr.s_addr = INADDR_ANY;
server.sin_family = AF_INET;
server.sin_port = htons(8888);
if(bind(socket_desc, (struct sockaddr *)&server, sizeof(server)) <0){
printf("bind failed\n");
}
listen(socket_desc, 5);
c = sizeof(struct sockaddr_in);
new_socket = accept(socket_desc, (struct sockaddr *) &client, (socklen_t *) &c);
if (new_socket < 0){
printf("Accept failed\n");
} else{
printf("Accept\n");
while(1); // When accept , do not anything.
}
return 0;
}