Open chengfengjie opened 6 years ago
int socket(int domain, int type, int protocol);
参数解析:
domain
PF_INET
PF_INET6
PF_LOCAL
PF_PACKET
PF_IPX
type
SOCK_STREAM
SOCK_DGRAM
protocol
socket
同一协议族中存在多个数据传输方式相同的协议
IPPROTO_TCP
int tcp_socket = socket(PF_INET, SOCK_STEAM, IPPROTO_TCP);
SOCK_DGRAM值得是面向消息的数据传输方式,满足条件的协议只有IPPROTO_UDP。因此,可以调用socket函数创建UDP套接字
IPPROTO_UDP
int udp_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
创建套接字
int socket(int domain, int type, int protocol);
参数解析:
domain
: 套结字中使用的协议族(Protocol Family)信息,主要参数有PF_INET
: IPv4互联网协议族,最常用的PF_INET6
: IPv6互联网协议族PF_LOCAL
: 本地通信协议族PF_PACKET
: 底层套接字的协议族PF_IPX
: IPX Novell协议族type
: 套接字传输类型信息,指定套接字的数据传输方式,常用类型如下。SOCK_STREAM
: 面向连接的套接字,特性有 1、传输过程中数据不会消失 2、按序传输数据,数据传输顺序不会变 3、传输的数据不存在边界SOCK_DGRAM
: 面向消息的套接字, 特性 1、强调快速传输而非传输顺序 2、传输的数据可能丢失也可能损毁 3、传输的数据有数据边界 4、限制每次传输数据的大小protocol
: 计算机间通信使用的协议信息,解析socket
的前两个参数传递了协议族信息和套结字数据传输方式,这两个信息即可创建所需套接字,所以大多数情况可以向protocol
传入参数0,但是如有一下情况:同一协议族中存在多个数据传输方式相同的协议
,传输方式不同,但是协议相同,此时需要通过第三个参数具体制定协议信息。 参数PF_INET
是IPv4协议族,SOCK_STREAM
是面向连接的数据传输,满足这两个条件的协议只有IPPROTO_TCP
,因此可以调用如下socket函数创建套结字,这种套接字称为TCP套接字SOCK_DGRAM
值得是面向消息的数据传输方式,满足条件的协议只有IPPROTO_UDP
。因此,可以调用socket函数创建UDP套接字