socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None) famliy:地址族;默认为AF_INET;还有AF_INET6、AF_UNIX、AF_CAN、AF_RDS;(AF_UNIX实际上是使用本地 socket 文件来通信)。 type:套接字类型;应为SOCK_STREAM(默认值,基于TCP)、SOCK_DGRAM(基于UDP)、SOCK_RAW或其他SOCK_常量之一。
struct tcp_sock 从 struct inet_connection_sock 结构体的基础上继承而来,在 struct inet_connection_sock 上增加了一些tcp协议相关的字段,如滑动窗口协议,拥塞算法等一些TCP专有的属性。由于这种继承关系,可以互相转换,如下举例两种转换方式,第一种是struct sock转换为struct tcp_sock,第二种是struct sock转换成struc...
socket.SOCK_STREAM) # 实例化得到socket对象#client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 实例化得到socket对象#connect:连接服务端client.connect(('127.0.0.1',8000))#send:发送信息给服务端client.send(b'hello')#recevie:接收服务端发来的消息data...
而对应struct tcp_sock,其第一个成员变量是struct inet_connection_sock inet_conn,不过struct inet_connection_sock inet_conn的第一个成员变量依然是struct inet_sock inet。所以无论是udp_sock还是tcp_sock,其内存布局上都保证了struct inet_sock inet为第一个成员变量。 structinet_sock{ /* sk and pinet6 h...
tcp_socket_server=socket(AF_INET,SOCK_STREAM) tcp_socket_server.bind(ip_port) tcp_socket_server.listen(5) conn,addr=tcp_socket_server.accept() data1=conn.recv(2)#一次没有收完整data2=conn.recv(10)#下次收的时候,会先取旧的数据,然后取新的print('--->',data1.decode('utf-8'))print...
这两者之间的概念似乎有些混淆,可以这么理解,struct proto_ops的成员操作struct socket层次上的数据,处理完了,再由它们调用成员sk->sk_prot的函数,操作struct sock层次上的数据。即它们之间存在着层次上的差异。struct proto类型的变量在协议栈中总共也有三个,分别是mytcp_prot,myudp_prot,myraw_prot,对应TCP, ...
sock结构工作在INET socket层,所有BSD socket层的操作都通过struct sock 及其域字段prot指针转化为prot锁指向的函数处理,所以sock结构是维系 BSD socket层和INET socket层的纽带,其重要性是不言而喻的。 下面是对sock结构的简单注释,有些没有的待我弄懂后再来修改,^_^ ...
另外,学习本章节前,务必要优先学习第12章TCP客户端。学会创建一个TCP客户端了,创建多个客户端是一样...
这两者之间的概念似乎有些混淆,可以这么理解,struct proto_ops的成员操作struct socket层次上的数据,处理完了,再由它们调用成员sk->sk_prot的函数,操作struct sock层次上的数据。即它们之间存在着层次上的差异。struct proto类型的变量在协议栈中总共也有三个,分别是mytcp_prot,myudp_prot,myraw_prot,对应TCP, ...
这两者之间的概念似乎有些混淆,可以这么理解,struct proto_ops的成员操作struct socket层次上的数据,处理完了,再由它们调用成员sk->sk_prot的函数,操作struct sock层次上的数据。即它们之间存在着层次上的差异。struct proto类型的变量在协议栈中总共也有三个,分别是mytcp_prot,myudp_prot,myraw_prot,对应TCP, ...