gcc 123.c -o runsudo cp run /sbinsudo chmod 777 /sbin/run测试:编译为run程序,放到一个自己PATH环境变量里的某个路径里,例如$HOME/bin,运行run,然后telnet localhost 10013看结果 。
第一步 运行程序,此时程序阻塞在accept()这个位置 。

文章插图
第二步 重新打开一个终端,执行以下命令 。

文章插图
第三步: 可以看到次异步运行的程序退出,并打印了bind call OK! 说明子进程被执行,并且成功绑定了端口10013,验证了第一种情况 。

文章插图
- 第二种情况我没有环境测,所以就不给测试程序了,大家有条件的可以自己写一个来测试一下 。
- 测试第三种情况的程序 读取本地ip地址

文章插图
ifconfig
可以得到本地地址为:
eth0 : 192.168.43.171lo : 127.0.0.1测试代码#include <netinet/in.h> #include <sys/socket.h> #include <time.h> #include <stdio.h> #include <string.h> #define MAXLINE 100 int main(int argc, char** argv) { int fd1,fd2; struct sockaddr_in servaddr1,servaddr2; char buff[MAXLINE+1]; time_t ticks; unsigned short port; int flag=1,len=sizeof(int); port=10013; if( (fd1=socket(AF_INET,SOCK_STREAM,0)) == -1) { perror("socket"); exit(1); } if( (fd2=socket(AF_INET,SOCK_STREAM,0)) == -1) { perror("socket"); exit(1); } bzero(&servaddr1,sizeof(servaddr1)); bzero(&servaddr2,sizeof(servaddr2)); servaddr1.sin_family=AF_INET; servaddr2.sin_family=AF_INET; if( inet_pton(AF_INET, "127.0.0.1", &servaddr1.sin_addr) <= 0) { printf("inet_pton() call error:127.0.0.1n"); exit(1); } if( inet_pton(AF_INET, "192.168.43.171", &servaddr2.sin_addr) <= 0) { printf("inet_pton() call error:128.160.1.230n"); exit(1); } servaddr1.sin_port=htons(port); servaddr2.sin_port=htons(port); if( setsockopt(fd1, SOL_SOCKET, SO_REUSEADDR, &flag, len) == -1) { perror("setsockopt"); exit(1); } if( setsockopt(fd2, SOL_SOCKET, SO_REUSEADDR, &flag, len) == -1) { perror("setsockopt"); exit(1); } if( bind(fd1,(struct sockaddr*)&servaddr1,sizeof(servaddr1)) == -1) { perror("bind fd1"); exit(1); } if( bind(fd2,(struct sockaddr*)&servaddr2,sizeof(servaddr2)) == -1) { perror("bind fd2"); exit(1); } printf("bind fd1 and fd2 OK!n"); /*put other process here*/ getchar(); exit(0);/* end */ } 执行结果
文章插图
结果
- 由于第四种情况只用于UDP的多播,和TCP的使用没多大关系,所以就不写测试例子了 。自己有兴趣的可以写 。
推荐阅读
- 一个Java文件的执行全部过程你确定都清楚吗?
- 超实用的tomcat启动脚本实现
- 一张纸的童话故事?关于纸的童话故事
- 一文详解 C++ 框架:日志框架
- 朋友结婚随礼多少钱合适?
- JavaScript前端各种文件下载功能的实现
- WebSocket能干些啥?
- web前端HTML高频面试题
- 乾隆的墓里为什么空一个棺材?乾隆的坟墓什么时候被盗
- 新手在家做自媒体影视剪辑,一个月赚了10158,方法教给大家
