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...
TCP_CLOSE, TCP_CLOSE_WAIT, TCP_LAST_ACK, TCP_LISTEN, TCP_CLOSING, TCP_MAX_STATES ; 这些取值从名字上看,似乎只使用于TCP协议,但事实上,UDP和RAW也借用了其中一些值,在一个socket创建之初,其取值都是 TCP_CLOSE,一个UDP socket connect完成后,将这个值改为TCP_ESTABLISHED,最后,关闭sockt前置回TCP_CLOSE...
看完上面两个,我们觉得第三个应该就是struct tcp_sock了,但事实上,struct tcp_sock并不直接从struct inet_sock上扩展,而是从struct inet_connection_sock基础上进行扩展,struct inet_connection_sock是所有面向连接的socket的表示,关于该socket,及下面所有tcp相关的socket,我们在分析 tcp实现时再详细介绍,这里只列出它...
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结构的简单注释,有些没有的待我弄懂后再来修改,^_^ ...
structtcp_sock*tp=tcp_sk(sk); structsk_buff*skb; intiovlen,flags; intmss_now,size_goal; intsg,err,copied; longtimeo; ... ... } 与UDP类似,对应于udp_sock,TCP也有struct tcp_sock。因为TCP的要比UDP复杂的多,所以这个tcp_sock也比udp_sock复杂庞大的多。这个struture非常复杂,超过160多行。不...
这两者之间的概念似乎有些混淆,可以这么理解,struct proto_ops的成员操作struct socket层次上的数据,处理完了,再由它们调用成员sk->sk_prot的函数,操作struct sock层次上的数据。即它们之间存在着层次上的差异。struct proto类型的变量在协议栈中总共也有三个,分别是mytcp_prot,myudp_prot,myraw_prot,对应TCP, ...
sk.close()#1.发送端的粘包 合包机制 + 缓存区#2.接收端的粘包 延迟接受 + 缓存区#3.流式传输#电流 高低电压#所以我们说 tcp协议是无边界的流式传输#4.拆包机制#粘包现象#接收端不知道发送端给我发送了多长的数据 importstructimportsocket sk=socket.socket() ...