socket()
int socket(int domain, int type, int protocol);
描述:
socket()用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。这个socket描述字跟文件描述字一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。创建socket的时候,也可以指定不同的参数创建不同的socket描述符。
参数:
-
domain:即协议域,又称为协议族(family)。常用的协议族有,AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域socket)、AF_ROUTE等等。协议族决定了socket的地址类型,在通信中必须采用对应的地址。
- AF_INET:ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX决定了要用一个绝对路径名作为地址。
- AF_INET6:ipv6
-
type:指定socket类型。设置通信的协议类型,常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等。
- SOCK_STREAM: 提供面向连接的稳定数据传输,即TCP协议。
- OOB: 在所有数据传送前必须使用connect()来建立连接状态。
- SOCK_DGRAM: 使用不连续不可靠的数据包连接。
- SOCK_SEQPACKET: 提供连续可靠的数据包连接。
- SOCK_RAW: 提供原始网络协议存取。
- SOCK_RDM: 提供可靠的数据包连接。
- SOCK_PACKET: 与网络驱动程序直接通信。
-
protocol:指定协议。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议,type和protocol并不是可以随意组合的,如SOCK_STREAM不可以跟IPPROTO_UDP组合。当protocol为0时,会自动选择type类型对应的默认协议。 这一参数通常不具体设置,一般设置为0即可。