监听socket(bind()的backlog参数)
2016-03-28 17:43
441 查看
监听socket的创建:
sockfd参数指定被监听的socket。backlog参数提示内核监听队列的最大长度(backlog + 1)。
listen成功返回0, 失败返回-1,设置errrno。
研究backlog参数对listen系统调用实际影响:
该程序接收3个参数:IP地址,端口号,backlog的值。
客户端多次执行连接(telnet ip port),
命令netstat -nt \grep port 查看服务器连接状态。
在监听队列中,处于ESTABLISHED状态的连接只有backlog+1个。
《Linux高级服务器编程》
#include <sys/socket.h> int listen(int sockfd, int backlog);
sockfd参数指定被监听的socket。backlog参数提示内核监听队列的最大长度(backlog + 1)。
listen成功返回0, 失败返回-1,设置errrno。
研究backlog参数对listen系统调用实际影响:
/***********************/ // @file backlog.c // @author lesliefish(yuleics@outlook.com) // @date 2016-03-28 17:02:36 /***********************/ #include <iostream> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <assert.h> #include <signal.h> #include <string.h> static bool stop = false; //SIGTERM信号处理函数,触发时执行此函数结束循环 static void handle_term(int sig) { stop = true; } int main(int argc, char *argv[]) { signal(SIGTERM, handle_term); if (argc <= 3) { printf("%s ip地址端口号 backlog\n", basename(argv[0]));//basename获取路径最后一个'/'后面的内容 return 1; } const char* ip = argv[1]; int port = atoi(argv[2]); int backlog = atoi(argv[3]); int sock = socket(PF_INET, SOCK_STREAM, 0); assert(sock >= 0); //创建IPv4 socket地址 struct sockaddr_in address; bzero(&address, sizeof(address)); address.sin_family = AF_INET; inet_pton(AF_INET, ip, &address.sin_addr); address.sin_port = htons(port); int ret = bind(sock, (struct sockaddr*)&address, sizeof(address)); assert(ret != -1); ret = listen(sock, backlog); assert(ret != -1); while() { sleep(1); } close(sock); return 0; }
该程序接收3个参数:IP地址,端口号,backlog的值。
客户端多次执行连接(telnet ip port),
命令netstat -nt \grep port 查看服务器连接状态。
在监听队列中,处于ESTABLISHED状态的连接只有backlog+1个。
《Linux高级服务器编程》
相关文章推荐
- Java 关键字static final使用总结
- 【jQuery】prev ~ siblings选择器
- Poj 3280 Cheapest Palindrome【区间dp】
- Win8.1+CentOS7 双系统 U盘安装
- 史上最全的maven pom.xml文件教程详解
- p(247)赫夫曼编码
- Handler,Looper&&在异步线程中更新UI
- 基于TCP实现简单的客户端服务端的消息传递
- C#使用正则表达式检测数字 char 和韩文
- Android通过HttpURLConnection链接到网络,并获取网络数据
- Windows 安装Kafka
- [JAVA · 初级]:12.内部类
- 安卓的动画效果分析
- Activiti简单示例入门
- 值类型引用类型图解
- 23个Facebook Paper中的设计细节
- 使用unbound在RHEL7上搭建DNS服务
- SpringMVC与Struts2的主要区别
- iOS导入第三方库步骤-CocoaPods
- flash画图API:解析obj格式