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写的Socks5协议代理服务器
Aug 06 Python
利用Python中的mock库对Python代码进行模拟测试
Apr 16 Python
Python中的自省(反射)详解
Jun 02 Python
python3音乐播放器简单实现代码
Apr 20 Python
python中的内置函数max()和min()及mas()函数的高级用法
Mar 29 Python
Python3用tkinter和PIL实现看图工具
Jun 21 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
将python图片转为二进制文本的实例
Jan 24 Python
python动态视频下载器的实现方法
Sep 16 Python
详解pycharm连接不上mysql数据库的解决办法
Jan 10 Python
python实现文法左递归的消除方法
May 22 Python
python数据抓取3种方法总结
Feb 07 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
留言板翻页的实现详解
2006/10/09 PHP
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
javascript 有用的脚本函数
2009/05/07 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
JS获取表格内指定单元格html内容的方法
2015/03/31 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
python利用sklearn包编写决策树源代码
2017/12/21 Python
Python给你的头像加上圣诞帽
2018/01/04 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
python list元素为tuple时的排序方法
2018/04/18 Python
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
tensorflow 环境变量设置方式
2020/02/06 Python
解决json中ensure_ascii=False的问题
2020/04/03 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
2020/04/22 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
美国体育用品商店:Academy Sports + Outdoors
2020/01/04 全球购物
一些关于MySql加速和优化的面试题
2014/01/30 面试题
会计出纳岗位职责
2013/12/25 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书
导游词之吉林吉塔
2019/11/11 职场文书
Android自定义双向滑动控件
2022/04/19 Java/Android