linux下socket的分配算法
来源:互联网 发布:unity3d门动画怎么做 编辑:程序博客网 时间:2024/05/21 00:18
目的: linux服务端开发有一种常用做法,是定义一个大数组存放所有玩家信息,大小为65536,以socket为下标存储玩家信息,理由是linux下socket描述符的分配是递增1的,而端口号为16位,最大为65536,即一台物理机最多能接受65536个连接。所以用一个65536的大数组来存放所有玩家是安全的。
本文目的是分析windows, linux下socket的分配算法,验证以上做法是否安全。
测试语句:
SOCKET new_sd = ::socket( AF_INET, SOCK_STREAM, IPPROTO_TCP);
硬件环境: x86
windows:
test.rar
从某个值(每次都不固定)开始递减4,一直到最小值。又开始从某个值递增4,一直到返回-1.
WSAGetLastError为WSAENOBUFS(10055) : 由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作。
结论: 能分配的socket远远大于65536且不连续,假设最大连接数65536时,分配的socket肯定远大于65536(递增4)
所以不能用一个静态大数组,以socket为下标来存储。
linux:
test.rar
socket在linux是文件描述符的一种。每个进程文件描述符数量是有限制的。 ulimit -n可以查看当前进程能使用的最大文件描述符数量。一般是1024.
去掉0,1,2,从3开始分配socket描述符,递增1,所以可以用大数组,以socket为下标。
本文目的是分析windows, linux下socket的分配算法,验证以上做法是否安全。
测试语句:
SOCKET new_sd = ::socket( AF_INET, SOCK_STREAM, IPPROTO_TCP);
硬件环境: x86
windows:
test.rar
从某个值(每次都不固定)开始递减4,一直到最小值。又开始从某个值递增4,一直到返回-1.
WSAGetLastError为WSAENOBUFS(10055) : 由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作。
结论: 能分配的socket远远大于65536且不连续,假设最大连接数65536时,分配的socket肯定远大于65536(递增4)
所以不能用一个静态大数组,以socket为下标来存储。
linux:
test.rar
socket在linux是文件描述符的一种。每个进程文件描述符数量是有限制的。 ulimit -n可以查看当前进程能使用的最大文件描述符数量。一般是1024.
去掉0,1,2,从3开始分配socket描述符,递增1,所以可以用大数组,以socket为下标。
- linux下socket的分配算法
- Linux和Windows下Socket句柄(描述符)的分配策略
- Linux和Windows下Socket句柄(描述符)的分配策略
- Linux和Windows下Socket句柄(描述符)的分配策略
- Linux下的内存分配
- Linux下的内存分配
- Linux下的Socket编程
- linux下的socket编程
- Linux下的Socket编程
- linux下的socket编程
- Linux下简单的socket
- Linux下的socket编程
- linux下的socket编程
- linux下的socket编程
- LINUX下的SOCKET编程
- Linux下的Socket编程
- Linux下的socket文件传输
- Linux下的socket建立
- Javascript 自执行函数
- BZOJ 1010([HNOI2008]玩具装箱toy-斜率优化)
- java普通类得到request对象
- opencv 学习第四天 学习opencv(中文版) alpha融合
- 不能错过的4本Linux好书
- linux下socket的分配算法
- linux(ubuntu) mysql 常见命令
- 精简版的MySQL制作步骤
- 将Oracle的数据倒入EXCEL中的方法
- 老中医顺口溜
- 仿有道词典 ListView item飞入效果
- svn报错,有冲突:Conflict discovered in ...
- Ext.Net 1.x_Ext.Net.GridPanel嵌套Checkbox
- android 导入外部工程没反应