在 Linux/Unix 系统编程中,使用 sockfd
(socket 文件描述符)通常需要包含以下头文件:
基础网络编程头文件
#include <sys/socket.h> // socket()、bind()、listen()、accept() 等核心函数
#include <netinet/in.h> // IPv4/IPv6 地址结构(struct sockaddr_in)
#include <arpa/inet.h> // IP地址转换函数(inet_pton()、inet_addr()等)
#include <unistd.h> // close()、read()、write() 等系统调用
可选补充头文件
#include <string.h> // memset()、strerror() 等字符串操作
#include <errno.h> // errno 错误码处理
#include <fcntl.h> // fcntl()(设置非阻塞socket等)
示例代码片段
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0); // 创建TCP socket
if (sockfd == -1) {
perror("socket creation failed");
return -1;
}
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
if (connect(sockfd, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
perror("connect failed");
close(sockfd);
return -1;
}
printf("Connected to server!\n");
close(sockfd);
return 0;
}
关键说明
sys/socket.h
- 提供
socket()
、bind()
、listen()
、accept()
等核心函数。
- 提供
netinet/in.h
- 定义
sockaddr_in
(IPv4)和sockaddr_in6
(IPv6)地址结构。
- 定义
arpa/inet.h
- IP地址转换函数(如
inet_pton()
),避免手动处理字节序。
- IP地址转换函数(如
如果需要更高级的功能(如多路复用),可能还需:
<poll.h>
/<sys/epoll.h>
:I/O多路复用
<sys/ioctl.h>
:控制套接字行为
如果有其他具体场景需求,可以进一步说明!
内容由零声教学AI助手提供,问题来源于学员提问