在 Linux 中,套接字编程是进行网络通信的基础。以下是一些常用的 Linux 套接字函数及其简要说明:
创建和管理套接字
socket()
- 创建一个新的套接字。
- 原型:
int socket(int domain, int type, int protocol);
- 返回值:成功返回新套接字描述符;失败返回 -1。
bind()
- 将套接字绑定到本地地址。
- 原型:
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
- 返回值:成功返回 0;失败返回 -1。
listen()
- 在套接字上监听连接请求。
- 原型:
int listen(int sockfd, int backlog);
- 返回值:成功返回 0;失败返回 -1。
accept()
- 接受一个连接请求并创建一个新的套接字用于与客户端通信。
- 原型:
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
- 返回值:成功返回新的套接字描述符;失败返回 -1。
connect()
- 连接到服务器的指定地址。
- 原型:
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
- 返回值:成功返回 0;失败返回 -1。
send()
- 向已连接的套接字发送数据。
- 原型:
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
- 返回值:实际发送的字节数;失败时返回-1。
recv()
- 从已连接的套接字接收数据。
- 原型:
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
- 返回值:实际接收到的字节数;如果连接关闭,可能会返回0;出错时返回-1。
close()
- 关闭套接字并释放相关资源。
- 原型:
int close(int fd);
- 返回值:成功返回 0;失败时返回-1。
设置和获取选项
setsockopt()
- 设置套接字选项。
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
getsockopt()
- 获取当前设置的选项。
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
地址结构
通常使用 sockaddr_in
或 sockaddr_in6
来定义 IPv4 或 IPv6 地址:
struct sockaddr_in {
short sin_family; // 地址族 (AF_INET)
unsigned short sin_port; // 端口号 (网络序)
struct in_addr sin_addr; // IP地址
};
总结
这些函数构成了基于 TCP/IP 协议进行网络通信的基础。通过组合这些函数,你可以实现客户端和服务器之间的数据交换。需要注意的是,在调用这些函数后,应检查它们的返回值,以处理可能发生的错误。
内容由零声教学AI助手提供,问题来源于学员提问