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 相关文章推荐
Tornado服务器中绑定域名、虚拟主机的方法
Aug 22 Python
Python通过poll实现异步IO的方法
Jun 04 Python
浅析Python 中整型对象存储的位置
May 16 Python
python导入csv文件出现SyntaxError问题分析
Dec 15 Python
代码讲解Python对Windows服务进行监控
Feb 11 Python
python定向爬取淘宝商品价格
Feb 27 Python
Sanic框架蓝图用法实例分析
Jul 17 Python
Python实现高斯函数的三维显示方法
Dec 29 Python
12个Python程序员面试必备问题与答案(小结)
Jun 24 Python
Python List列表对象内置方法实例详解
Oct 22 Python
Python中的 ansible 动态Inventory 脚本
Jan 19 Python
利用python控制Autocad:pyautocad方式
Jun 01 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程序中防止盗链
2008/04/09 PHP
php csv操作类代码
2009/12/14 PHP
php实现Mongodb自定义方式生成自增ID的方法
2015/03/23 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
php 如何禁用eval() 函数实例详解
2016/12/01 PHP
JavaScript 基础问答三
2008/12/03 Javascript
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
js操作checkbox遇到的问题解决
2013/06/29 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
2014/06/20 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
Bootstrap源码解读导航条(7)
2016/12/23 Javascript
node.js中EJS 模板快速入门教程
2017/05/08 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
微信小程序云开发之使用云存储
2019/05/17 Javascript
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
virtualenv实现多个版本Python共存
2017/08/21 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
Python imread、newaxis用法详解
2019/11/04 Python
Python安装whl文件过程图解
2020/02/18 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
基于Python爬取京东双十一商品价格曲线
2020/10/23 Python
CSS3网格的三个新特性详解
2014/04/04 HTML / CSS
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
土木工程毕业生推荐信
2013/10/28 职场文书
日语系毕业生推荐信
2013/11/11 职场文书
问卷调查计划书
2014/01/10 职场文书
会计的岗位职责
2014/03/15 职场文书
艺术节开幕词
2015/01/28 职场文书
Oracle笔记
2021/04/05 Oracle
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python