socket

创建一个socket

头文件

#include < sys/socket.h >

函数原型

int socket(int family, int type, int protocol)

函数说明

family:协议域

family 说明
AF_INET IPv4 协议
AF_INET6 IPv6 协议
AF_LOCAL Unix域协议
AF_UNIX unix域协议
AF_ROUTE 路由套接字
AF_KEY 密钥套接字
AF_UNSPEC 任何域
AF_NETLINK 内核用户接口设备

type: socket 类型

type 说明
SOCK_STREAM 字节流套接字
SOCK_DGRAM 数据报套接字
SOCK_RAW 原始套接字
SOCK_PACKET

从2.6.27开始,type参数提供第二个目地,可以使用位或指定socket而外的设置:
SOCK_NONBLOCK: 设置成非阻塞
SOCK_CLOEXEC: 用于子进程fork后再执行exec时,自动关闭父进程打开的文件描述符

protocol: 指定协议

protocol 说明
IPPROTO_TCP tcp传输协议
IPPROTO_UDP udp传输协议
IPPROTO_SCTP 流控制传输协议
IPPROTO_ICMP icmp协议
IPPROTO_RAW 原始IP数据报协议
IPPROTO_IP IPV4网际协议

AF_XXX 与 PF_XXX的联系与区别:

  • AF_ 前缀表示地址族, PF_ 前缀表示协议族
  • 一般AF用于套接字地址结构,PF用于socket的第一个参数
  • 历史上有这样的想法:单个协议族可以支持多个地址族,PF值用来创建套接字,AF值用于套接字地址结构,但实际上,支持多个地址族的协议族从未实现。

返回

成功返回描述符,失败返回-1

文档更新时间: 2021-02-28 19:57   作者:周国强