时间:2021-05-22
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 就可以了 :-)
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Netcat或者叫nc是Linux下的一个用于调试和检查网络工具包。可用于创建TCP/IP连接,最大的用途就是用来处理TCP/UDP套接字。 这里我们将通
套接字是网络间通信的端点,套接字编程使这些端点能够传输数据,从而支持网络和程序之间的通信。对于初学者来说,套接字编程很重要,可以理解网络如何通信。套接字编程具有
这是用来快速学习PythonSocket套接字编程的指南和教程。Python的Socket编程跟C语言很像。Python官方关于Socket的函数请看http:
相关Java类SocketpublicclassSocketextendsObject·功能:TCP客户端套接字·构造方法:Socket(InetAddress
如果你想要运行多个服务器,最容易的方法是用不同的TCP/IP端口和套接字文件重新编译服务器,因此他们不是侦听同一个TCP/IP端口或套接字。假设一个现存服务器配