Python里disconnect UDP套接字的方法
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 网络编程之UDP发送接收数据功能示例【基于socket套接字】
- python UDP(udp)协议发送和接收的实例
- python实现udp数据报传输的方法
- python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
- python基础教程之udp端口扫描
- python检测远程udp端口是否打开的方法
- Python的Socket编程过程中实现UDP端口复用的实例分享
- Python+Socket实现基于UDP协议的局域网广播功能示例
- python网络编程之数据传输UDP实例分析
- Python基于socket模块实现UDP通信功能示例
- Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
- Python udp网络程序实现发送、接收数据功能示例
相关文章
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
今天小编就为大家分享一篇tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-01-01Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
这篇文章主要介绍了Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法,涉及Python基于urllib模块的页面爬取与文件读写相关操作技巧,需要的朋友可以参考下2018-04-04jupyter notebook中新建cell的方法与快捷键操作
这篇文章主要介绍了jupyter notebook中新建cell的方法与快捷键操作,具有很好的参考价值,希望对有所帮助。一起跟随小编过来看看吧2020-04-04解决Python爬虫错误之twisted.web.error.SchemeNotSupported: Unsu
这篇文章主要介绍了解决Python爬虫错误之twisted.web.error.SchemeNotSupported: Unsupported scheme: b''问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-02-02Python使用urllib2模块抓取HTML页面资源的实例分享
这篇文章主要介绍了Python使用urllib2模块抓取HTML页面资源的实例分享,将要抓取的页面地址写在单独的规则列表中方便组织和重复使用,需要的朋友可以参考下2016-05-05
最新评论