博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[网络通信]同一socket使用两个线程分别收发,如何关闭socket
阅读量:6447 次
发布时间:2019-06-23

本文共 438 字,大约阅读时间需要 1 分钟。

hot3.png

1、通常我们使用select或poll在一个线程中处理socket的收与发。如果对同一socket,有两个线程,一个线程用于发送,一个线程用于接收,当发送或接收发现socket需要关闭时,如何正确地处理?

因为一个线程中关闭了的socket,而该socket可能在另一个线程中还在被使用。

极端情况下,一个线程关闭了socket,然后又创建了一个新的socket,这个socket句柄与之前的相同,可能会造成另一线程使用了新的socket,而没有觉察之前的socket已经变化了。

2、引用计数

考虑使用引用计数,初使化为2,用线程安全的方式对计数处理,将计数降为0的线程,负责关闭该socket。

3、句柄复制

在使用前,对句柄进行dup,两个线程分别使用不同的句柄。这样两个线程关闭就互不影响,类似于fork的两个进程中使用同一个socket句柄。

4、还有其它更好的方法吗?

转载于:https://my.oschina.net/u/136074/blog/686507

你可能感兴趣的文章
Python 模拟登陆
查看>>
LTS 轻量级分布式任务调度框架(Light Task Scheduler)用户文档.md
查看>>
触摸屏点餐系统编程案例
查看>>
linux-dns
查看>>
shell脚本编辑6:awk过滤
查看>>
Jeecg_3.6新版本功能专题讲解 - 公开课
查看>>
docker在windows上无法跑起来的解决方法
查看>>
第三期 OSI七层中第一层 物理层
查看>>
python学习--列表
查看>>
十(5)firewalld的9个zone、firewalld关于zone、service的操作、
查看>>
【Linux】开源分布式存储系统:MooseFS
查看>>
一周第二次课(3月20日) 笔记
查看>>
.net core发布之后可以更改视图文件配置项
查看>>
springboot 整合 redis
查看>>
synchronized使用及实现原理
查看>>
回文数字
查看>>
mysql5.6中文索引mysqlcft插件
查看>>
APP为什么会被DDOS***呢?
查看>>
Java中的乱码问题研究(一)
查看>>
强大的Makefile
查看>>