socket函数声明

1
2
3
4
5
6
#include <sys/socket.h>

// domain 套接字中使用的协议族信息
// type 套接字数据传输类型信息
// protocol 计算机间通信中使用的协议信息
int socket(int domain, int type, int protocol);

协议族(Protocol Family)

socket函数的第一个参数

名称 协议族
PF_INET IPv4互联网协议族
PF_INET6 IPv6互联网协议族
PF_LOCAL 本地通信的UNIX协议族
PF_PACKET 底层套接字的协议族
PF_IPX IPX Novell协议族

套接字类型(Type)

socket函数的第二个参数

类型1:面向连接的套接字(SOCK_STREAM)

特点:

  • 传输过程中数据不会消失。
  • 按序传输数据。
  • 传输的数据不存在数据边界。

类型2:面向消息的套接字(SOCK_DGRAM)

特点:

  • 强调快速传输而非传输顺序。
  • 传输的数据可能丢失也可能损毁。
  • 传输的数据有数据边界。
  • 限制每次传输的数据大小。

协议的最终选择

大多数情况下前两个参数即可创建所需的套接字,所以第三个参数可以传0。但当遇数据传输方式相同,但协议不同的情况就需要通过第三个参数制定具体协议信息。

IPv4协议族中面向连接的套接字(TCP套接字):

1
int tcp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

IPv4协议族中面向消息的套接字(UDP套接字):

1
int udp_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);