socket()
sys/socket.h
int socket(int domain, int type, int protocol);
创建一个通信端点并返回文件描述符,后续 bind / listen / accept / connect 都以它为基础。
# socket · 创建通信端点
## 头文件
`sys/socket.h`
## 函数原型
`int socket(int domain, int type, int protocol);`
## 说明
socket 创建一个通信端点,成功后返回一个文件描述符,之后所有网络操作都基于它。三个参数分别决定地址族、套接字类型与协议。
- domain:常用 AF_INET(IPv4)、AF_INET6(IPv6)、AF_UNIX(本机进程间)
- type:SOCK_STREAM(TCP,面向连接、字节流)、SOCK_DGRAM(UDP,无连接、报文)、SOCK_RAW(原始套接字)
- protocol:一般传 0,由内核按前两个参数选默认协议
失败返回 -1 并设置 errno。
## 最小示例
```c
#include <stdio.h>
#include <sys/socket.h>
int main(void) {
int fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd < 0) { perror("socket"); return 1; }
printf("fd = %d\n", fd);
return 0;
}
```
## 常见坑
- 忘记检查返回值,fd 为 -1 时后续调用必然失败
- 把 AF_INET 与 PF_INET 混用——当前实现中二者数值相同,但语义上应分开理解
- 程序退出前不 close,文件描述符泄漏,跑久了会出现打开文件数超限
- 高并发下每个连接占一个 fd,需要先调高进程的 fd 上限
## 相关函数
bind、listen、accept、connect、close