• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python里disconnect UDP套接字的方法

Python里disconnect UDP套接字的方法

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了udp套接字编程,udp套接字,未能创建udp套接字,tcp套接字和udp套接字,python套接字等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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)));
}
</div>
不过既然是 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)
</div>
AF_UNSPEC 的值是 0,所以把一个和 struct sockaddr_in 一样长的全零缓冲区传给 connect 就可以了 :-)

</div>

您可能想查找下面的文章:

  • Python里disconnect UDP套接字的方法

相关文章

  • 跟老齐学Python之再深点,更懂list
  • Python的Django框架中TEMPLATES项的设置教程
  • python获取本地计算机名字的方法
  • python实现类的静态变量用法实例
  • python 类详解及简单实例
  • python去除空格和换行符的实现方法(推荐)
  • python求斐波那契数列示例分享
  • Python彩色化Linux的命令行终端界面的代码实例分享
  • Python脚本暴力破解栅栏密码
  • 利用Python爬虫给孩子起个好名字

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python自定义进程池实例分析【生产者、消费者模型问题】
    • python利用正则表达式提取字符串
    • CentOS下使用yum安装python-pip失败的完美解决方法
    • Python的Bottle框架的一些使用技巧介绍
    • Python实现全角半角转换的方法
    • 在Python的Flask框架中验证注册用户的Email的方法
    • 在Linux下调试Python代码的各种方法
    • Perl中著名的Schwartzian转换问题解决实现
    • python如何查看系统网络流量的信息
    • Python自定义类的数组排序实现代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有