实战测试SO_REUSEADDR选项
来源:互联网 发布:不可思议的夏天知乎 编辑:程序博客网 时间:2024/05/21 09:07
设置SO_REUSEADDR选项,对应TCP套接字处于TIME_WAIT状态下的socket可以重复绑定实用,看代码吧。
服务端:
#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netdb.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <errno.h>#include <malloc.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/ioctl.h>#include <stdarg.h>#include <fcntl.h>#include <sys/types.h>#include <sys/wait.h>#include <netinet/in.h>#include <arpa/inet.h>#include <signal.h>#define MAXLINE 4096int main(){ int listenfd,acceptfd,n; socklen_t clilen; char recvbuf[100]={0}; struct sockaddr_in cliaddr,servaddr; listenfd=socket(AF_INET,SOCK_STREAM,0); servaddr.sin_family=AF_INET; servaddr.sin_port=htons(8888); servaddr.sin_addr.s_addr = INADDR_ANY; int iOpt = 1; setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &iOpt, sizeof(iOpt)); bind(listenfd,(struct sockaddr *)&servaddr,sizeof(struct sockaddr_in)); listen(listenfd,5); clilen=sizeof(cliaddr); acceptfd=accept(listenfd,(struct sockaddr *)&cliaddr,&clilen); getchar(); close(acceptfd); close(listenfd); return 0;}客户端:
#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netdb.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <errno.h>#include <malloc.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/ioctl.h>#include <stdarg.h>#include <fcntl.h>#include <sys/types.h>#include <sys/wait.h>#include <netinet/in.h>#include <arpa/inet.h>#include <signal.h>#include <netinet/tcp.h>#define MAXLINE 4096int main(){ int sockfd,ret; struct sockaddr_in servaddr; char sendbuf[1000]={0}; sockfd=socket(AF_INET,SOCK_STREAM,0); bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family=AF_INET; servaddr.sin_port=htons(8888); servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); ret=connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr)); printf("ret=%d\n",ret); getchar(); close(sockfd); return 0;}编译,先启动服务端,再启动客户端。然后先关闭服务端,再关闭客户端,让服务端处理TIME_WAIT状态。
[mapan@localhost ~]$ netstat -na | grep 8888tcp 0 0 127.0.0.1:8888 127.0.0.1:49222 TIME_WAIT
此时,在启动服务端,启动客户端,可以看到connect函数成功返回。如果没有设置SO_REUSEADDR选项,则connect函数会返回-1,不信可以试试。
[mapan@localhost test]$ ./client ret=0
看,客户端返回成功了,很简单,测试一下就知道了。
阅读全文
0 0
- 实战测试SO_REUSEADDR选项
- 套接字选项 SO_REUSEADDR
- TCP选项之SO_REUSEADDR
- SO_REUSEADDR套接字选项
- socket选项: SO_REUSEADDR, SO_RCVBUF, SO_SNDBUF
- Unix网络编程 SO_REUSEADDR选项
- socket选项--SO_LINGER,SO_REUSEADDR(SO_REUSEPORT)
- SO_REUSEADDR 套接字选项作用
- SO_REUSEADDR测试及应用
- 网络协议栈中的 SO_REUSEADDR 选项
- SO_REUSEADDR 套接字选项应用实例
- SO_REUSEADDR 套接字选项应用实例
- 小笔记-setsockopt中SO_REUSEADDR选项
- 套接字选项:SO_REUSEADDR与SO_REUSEPORT
- SO_REUSEADDR 套接字选项应用实例
- 53-套接字选项(SO_REUSEADDR)
- SO_REUSEADDR
- SO_REUSEADDR
- 三维计算机视觉(五)--特征描述子
- 李嘉诚在香港做支付,为何要牵手马云?
- 10-1 python 线程
- ubuntu下安装cuda,cudnn以及tensorflow(gpu)
- Ubuntu 下android studio 使用draw9patch 制作 Nine-Path 图片
- 实战测试SO_REUSEADDR选项
- css样式整理
- Java
- pyCharm 2017激活码
- DPDK技术简介
- 机房之上下机
- poj1689 Alice's Chance(最大流)
- default 标签跳过 “”的初始化操作||LOAD_DLL_DEBUG_INFO中获取DLL文件名称
- ERROR 关于在servlet中使用Timer