Created
February 23, 2018 08:07
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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