Skip to content

Instantly share code, notes, and snippets.

@johnzeng
Created February 23, 2018 08:07
Show Gist options
  • Save johnzeng/70e0a2d2aad1205bab6e29073e1dce68 to your computer and use it in GitHub Desktop.
Save johnzeng/70e0a2d2aad1205bab6e29073e1dce68 to your computer and use it in GitHub Desktop.
This is a bug test for reproducing tcp syn+ack retransmission bug, this is not going to work good
#include <netinet/in.h> // for sockaddr_in
#include <sys/types.h> // for socket
#include <sys/socket.h> // for socket
#include <stdio.h> // for printf
#include <stdlib.h> // for exit
#include <string.h> // for bzero
/*
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
*/
#define HELLO_WORLD_SERVER_PORT 7777
#define LENGTH_OF_LISTEN_QUEUE 1
#define BUFFER_SIZE 1024
#define FILE_NAME_MAX_SIZE 512
int main(int argc, char **argv)
{
//设置一个socket地址结构server_addr,代表服务器internet地址, 端口
struct sockaddr_in server_addr;
bzero(&server_addr,sizeof(server_addr)); //把一段内存区的内容全部设置为0
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htons(INADDR_ANY);
server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);
//创建用于internet的流协议(TCP)socket,用server_socket代表服务器socket
int server_socket = socket(PF_INET,SOCK_STREAM,0);
if( server_socket < 0)
{
printf("Create Socket Failed!");
exit(1);
}
{
int opt =1;
setsockopt(server_socket,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
}
//把socket和socket地址结构联系起来
if( bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr)))
{
printf("Server Bind Port : %d Failed!", HELLO_WORLD_SERVER_PORT);
exit(1);
}
//server_socket用于监听
if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) )
{
printf("Server Listen Failed!");
exit(1);
}
while (1) //服务器端要一直运行
{
//do nothing
}
//关闭监听用的socket
close(server_socket);
return 0;
}
@johnzeng
Copy link
Author

Compile this code on a linux and telnet to port 7777, send something, and use ctrl+] to quit the telnet session, repeat again for one or two times, you will see syn+ack and ack retransmission on wireshark

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment