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通过ElementTree操作XML获取结点读取属性美化XML
Dec 02 Python
Python编程之属性和方法实例详解
May 19 Python
python实现生命游戏的示例代码(Game of Life)
Jan 24 Python
python2.7 json 转换日期的处理的示例
Mar 07 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
python判断一个数是否能被另一个整数整除的实例
Dec 12 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
Python提取特定时间段内数据的方法实例
Apr 01 Python
python实现合并多个list及合并多个django QuerySet的方法示例
Jun 11 Python
python网络编程:socketserver的基本使用方法实例分析
Apr 09 Python
Python加载数据的5种不同方式(收藏)
Nov 13 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
NO3第三帝国留言簿制作过程
2006/10/09 PHP
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
PHP中如何判断exec函数执行成功?
2016/08/04 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
原生js实现ajax方法(超简单)
2016/09/20 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
python计算最大优先级队列实例
2013/12/18 Python
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
Python打印输出数组中全部元素
2018/03/13 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
Python中利用aiohttp制作异步爬虫及简单应用
2018/11/29 Python
基于Python检测动态物体颜色过程解析
2019/12/04 Python
django框架两个使用模板实例
2019/12/11 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
python实现图像拼接功能
2020/03/23 Python
python如何输出反斜杠
2020/06/18 Python
聊聊python中的异常嵌套
2020/09/01 Python
美体小铺瑞典官方网站:The Body Shop瑞典
2018/01/27 全球购物
土木工程应届生自荐信
2013/09/24 职场文书
酒店司机岗位职责
2013/12/14 职场文书
表演方阵解说词
2014/02/08 职场文书
2014年服装销售工作总结
2014/11/27 职场文书
车间主任岗位职责
2015/02/03 职场文书
信访维稳承诺书
2015/05/04 职场文书
pytorch实现线性回归以及多元回归
2021/04/11 Python
总结Python连接CS2000的详细步骤
2021/06/23 Python
基于Python编写简易版的天天跑酷游戏的示例代码
2022/03/23 Python
JS函数式编程实现XDM一
2022/06/16 Javascript