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实现的扫雷游戏实例代码
Aug 01 Python
在Python的Django框架中调用方法和处理无效变量
Jul 15 Python
python编程实现希尔排序
Apr 13 Python
Python http接口自动化测试框架实现方法示例
Dec 06 Python
python:按行读入,排序然后输出的方法
Jul 20 Python
django ManyToManyField多对多关系的实例详解
Aug 09 Python
基于python实现学生信息管理系统
Nov 22 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
May 22 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
Nov 28 Python
PyQt5爬取12306车票信息程序的实现
May 14 Python
pytorch通过训练结果的复现设置随机种子
Jun 01 Python
解决Pytorch修改预训练模型时遇到key不匹配的情况
Jun 05 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采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
Drupal简体中文语言包安装教程
2014/09/27 PHP
php数组查找函数总结
2014/11/18 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
nginx 设置多个站跨域
2021/03/09 Servers
javascript模拟订火车票和退票示例
2014/04/24 Javascript
浅谈时钟的生成(js手写简洁代码)
2016/08/20 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
ES6新特性八:async函数用法实例详解
2017/04/21 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
angular动态表单制作
2018/02/23 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
示例vue 的keep-alive缓存功能的实现
2018/12/13 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
详解iview的checkbox多选框全选时校验问题
2019/06/10 Javascript
vue.config.js中配置Vue的路径别名的方法
2020/02/11 Javascript
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
深入解析Python中的WSGI接口
2015/05/11 Python
PyTorch基本数据类型(一)
2019/05/22 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
Python字符串三种格式化输出
2020/09/17 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
HTML5 weui使用笔记
2019/11/21 HTML / CSS
北卡罗来纳州豪华家具和家居装饰店:Carolina Rustica
2018/10/30 全球购物
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
行政管理专业推荐信
2013/11/02 职场文书
保安岗位职责
2014/02/21 职场文书
学生检讨书范文
2014/10/30 职场文书
运动会闭幕词
2015/01/28 职场文书
项目负责人岗位职责
2015/02/15 职场文书
加入学生会自荐书
2015/03/05 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
Python图像处理库PIL详细使用说明
2022/04/06 Python
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript