为了执行网络I/O,一个进程必须做的第一件事就是调用socket函数,指定通信协议类型(使用IPv4的TCP,使用IPv6的UDP,Unix域字节流协议)。
#include <sys/socket.h>
int socket(int family,int type, int protocol);
/*返回:若成功则为非负描述符,若出错则为-1*/
- family:指明协议族。AF_INET,AF_INET6,AF_LOCAL,AF_ROUTE,AF_KEY.
- type:指明套接字类型。
type | 说明 |
---|---|
SOCK_STREAM | 字节流套接字 |
SOCK_DGRAM | 数据报套接字 |
SOCK_SEQPACKET | 有序分组套接字 |
SOCK_RAW | 原始套接字 |
- protocol:IPPROTO_TCP、IPPROTO_UDP、IPPROTO_SCTP.或设置为0,以选择所给定family和type组合的系统默认值。
socket函数成功时返回一个小的非负整数值,它与文件描述符类似,称之为套接字描述符,简称sockfd。