为了执行网络I/O,一个进程必须做的一件事情就是调用socket函数,指定期望的通信协议类型(使用Ipv4的TCP,使用Ipv6的UDP,Unix域字节流协议等)。
# include<sys/socket.h> int socket(int family,int type,int protocol); 返回:若成功则为非负描述符,若出错则为-1
其中family参数指明协议簇,它是下图一所示的某个常值。该参数也常常被称为协议域。
type参数指明套接字类型,它是图二所示的某个常值。
protocol参数应设为图三所示的某个协议类型常值,或者设为0,以选择所给定的family和type组合的系统默认值。
图一 socket的family值:
family | 说明 |
AF_INET AF_INET6 AF_LOCAL AF_ROUTE AF_KEY |
IPv4协议 IPv6协议 Unix域协议 路由套接字 密钥套接字 |
图二 socket的type值
type | 说明 |
SOCK_STREAM SOCK_DGRAM SOCK_SEGPACKET SOCK_RAW |
字节流套接字 数据报套接字 有序分组套接字 原始套接字 |
图三 socket函数的AF_INET或AF_INET6的protocol常值
protocol | 说明 |
IPPROTO_TCP IPPROTO_UDP IPPROTO_SCTP |
TCP传输协议 UDP传输协议 SCTP传输协议 |
图四 socket函数的family和type的组合
AF_INET AF_INET6 AF_LOCAL AF_ROUTE AF_KEY
SOCK_STREAM |
SOCK_DGRAM |
SOCK_SEQPACKET |
SOCK_RAW |
TCP|SCTP | TCP|SCTP | 是 | ||
UDP | UDP | 是 | ||
SCTP | SCTP | |||
IPv4 | IPv6 | 是 | 是 |
socket函数成功返回一个小的非负整数值,它与文件描述符类似,我们把它称为套接字描述符,简称sockfd。
原文:http://www.cnblogs.com/wuchanming/p/3784254.html