Python里disconnect UDP套接字的方法


Posted in Python onApril 23, 2015

UDP 套接字是可以使用 connect 系统调用连接到指定的地址的。从此以后,这个套接字只会接收来自这个地址的数据,而且可以使用 send 系统调用直接发数据而不用指定地址。可以再次调用 connect 来连接到别的地方。但是在 Python 里,一旦调用 connect 之后,就再也回不到最初的能够接收从任意地址来的数据的状态了!

这是 Python 的 API 限制,没办法给 connect 方法传递到 AF_UNSPEC 地址簇(在 C 代码里写死了的)。C 里边就可以做到的(代码来自这里):

int disconnect_udp_sock(int fd) {

 struct sockaddr_in sin;        

 

 memset((char *)&sin, 0, sizeof(sin));

 sin.sin_family = AF_UNSPEC;

 return (connect(fd, (struct sockaddr *)&sin, sizeof(sin)));

}

不过既然是 Python 的限制,拿 ctypes 就可以绕过了嘛,有些麻烦就是了:
from ctypes import CDLL, create_string_buffer

 

def disconnect(sock):

  libc = CDLL("libc.so.6")

  buf = create_string_buffer(16) # sizeof struct sockaddr_in

  libc.connect(sock.fileno(), buf, 16)

AF_UNSPEC 的值是 0,所以把一个和 struct sockaddr_in 一样长的全零缓冲区传给 connect 就可以了 :-)
Python 相关文章推荐
python pickle 和 shelve模块的用法
Sep 16 Python
python实现给数组按片赋值的方法
Jul 28 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
Jan 20 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
python2.7实现FTP文件下载功能
Apr 15 Python
python制作图片缩略图
Apr 30 Python
简单了解python反射机制的一些知识
Jul 13 Python
python之pymysql模块简单应用示例代码
Dec 16 Python
Pytorch DataLoader 变长数据处理方式
Jan 08 Python
python 实现任务管理清单案例
Apr 25 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
Jun 18 Python
Python数据可视化实现多种图例代码详解
Jul 14 Python
Python实现的Google IP 可用性检测脚本
Apr 23 #Python
Python3.2中的字符串函数学习总结
Apr 23 #Python
Python与Redis的连接教程
Apr 22 #Python
Python实现的数据结构与算法之快速排序详解
Apr 22 #Python
利用Fn.py库在Python中进行函数式编程
Apr 22 #Python
Python实现的数据结构与算法之基本搜索详解
Apr 22 #Python
Python实现的数据结构与算法之链表详解
Apr 22 #Python
You might like
PHP编程之高级技巧——利用Mysql函数
2006/10/09 PHP
header()函数使用说明
2006/11/23 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
php中__toString()方法用法示例
2016/12/07 PHP
php防止sql注入的方法详解
2017/02/20 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
2016/09/15 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
javascript实现简易聊天室
2019/07/12 Javascript
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
使用PYTHON接收多播数据的代码
2012/03/01 Python
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
python制作填词游戏步骤详解
2019/05/05 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
python脚本和网页有何区别
2020/07/02 Python
python读取xml文件方法解析
2020/08/04 Python
新加坡最早生产电动滑板车的制造商之一:FunsToTheFore
2020/09/08 全球购物
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
软件部经理岗位职责范本
2014/02/25 职场文书
安全生产网格化管理实施方案
2014/03/01 职场文书
人力资源部经理的岗位职责
2014/03/04 职场文书
法学专业求职信
2014/07/15 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
物业公司管理制度
2015/08/05 职场文书
车位出租协议书范本
2016/03/19 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书
2019入党申请书格式
2019/06/25 职场文书