星巡研究院

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