我知道这TIME_WAIT
是为了防止一个连接的延迟段被误解为后续连接的一部分。当连接处于 TIME_WAIT 等待状态时到达的任何段都将被丢弃。
在我的实验中,我看不到TIME_WAIT
客户端何时发送 RST 数据包而不是 FIN 数据包。为什么?
服务器
while (1) {
int len = sizeof(struct sockaddr);
fd = accept(sfd, &remote, &len);
read(fd, buf, sizeof(buf));
strcpy(buf, "Hello Client");
write(fd, buf, strlen(buf));
close(fd);
}
客户
res = connect(sfd, result->ai_addr, result->ai_addrlen);
strcpy(buf, "Hello Server!");
write(sfd, buf, strlen(buf));
close(sfd);
注意:客户端发送 RST 而不是 FIN,因为它不会在关闭套接字之前读取服务器已经发送的缓冲数据。