关于socket连接池的小问题

flamkuavos 2011-10-14 11:29:26
1、是不是因为socket的创建(socket(***)函数)很花时间,因此才有了连接池的必要?
2、一个socket句柄(sokcet(***)函数的返回值)在连接某个ip并且传输完毕之后,是否可以再拿来connect另外一个ip?这两个过程是否能够调用closesocket?
...全文
288 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaobai1593 2011-10-20
  • 打赏
  • 举报
回复
套接字是内核资源,在内核态下创建;
连接池把创建好的套接字放在池中,每次需要accept()的时候就从池里分配一个给它
这样就避免了频繁的内核态和用户态的切换,而这个切换消耗很大
用完的套接字可以在内存池用相应的标记进行表示,不能closesocket(),否则系统会自动销毁该对象
smwhotjay 2011-10-18
  • 打赏
  • 举报
回复
1.连接池 比如预先建立个100连接.不做任何事.当需要时,直接从池里取出一个连接.给你用.用完后.你不要closesocket.而是交还给连接池. 这样优点是避免了频繁创建销毁socket.以及connect. 而不是内存碎片.

2.我没那样干过.
yynetsdk 2011-10-18
  • 打赏
  • 举报
回复
1.防止内存碎片
2.随便搞
jsyren 2011-10-17
  • 打赏
  • 举报
回复
1.频繁的创建销毁Socket肯定是要消耗开销的,一个服务器,经常要接受到连接请求和断开连接,就可以创建一个连接池,最简单的就是创建一个全局Socket数组,服务器运行期间,一旦产生,不再销毁。可以提高一些性能。
2.一个Socket,连接了一个ip之后,只要不销毁,还可以连接其他ip。这期间不能调用CloseSocket。。。
DENGLQ 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jiangyiaxiu 的回复:]
1、连接词可以理解为一个缓存,也可以相当于日常的”容器“的作用。当你要重复进行连接操作,每次使用每次创建,这样很耗资源,效率低,这样你可以创建一个连接词,存放多个连接操作,每当连接的时候去连接词里面调用即可 2.你第一个创建socket后然后closesocket后第二次肯定不能用了已经释放资源了。
[/Quote]


楼上的说得很明确了
督门提码 2011-10-17
  • 打赏
  • 举报
回复
1、连接词可以理解为一个缓存,也可以相当于日常的”容器“的作用。当你要重复进行连接操作,每次使用每次创建,这样很耗资源,效率低,这样你可以创建一个连接词,存放多个连接操作,每当连接的时候去连接词里面调用即可 2.你第一个创建socket后然后closesocket后第二次肯定不能用了已经释放资源了。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧