C++中的Socket_API
以下主要以 Linux C++ 为例。
常用头文件
1 |
socket()
创建套接字。
1 | int socket(int domain, int type, int protocol); |
常用参数:
1 | int fd = socket(AF_INET, SOCK_STREAM, 0); |
含义:
| 参数 | 说明 |
|---|---|
| AF_INET | IPv4 |
| SOCK_STREAM | TCP |
| 0 | 自动选择协议 |
UDP:
1 | int fd = socket(AF_INET, SOCK_DGRAM, 0); |
bind()
绑定本地 IP 和端口。
1 | int bind(int sockfd, const struct sockaddr* addr, socklen_t addrlen); |
示例:
1 | sockaddr_in addr{}; |
说明:
INADDR_ANY表示监听本机所有网卡htons()将端口从主机字节序转为网络字节序
listen()
将 Socket 变成监听状态。
1 | int listen(int sockfd, int backlog); |
示例:
1 | listen(sockfd, SOMAXCONN); |
accept()
接受客户端连接。
1 | int accept(int sockfd, struct sockaddr* addr, socklen_t* addrlen); |
示例:
1 | sockaddr_in clientAddr{}; |
connect()
客户端连接服务器。
1 | int connect(int sockfd, const struct sockaddr* addr, socklen_t addrlen); |
示例:
1 | sockaddr_in serverAddr{}; |
send() / recv()
TCP 数据发送和接收。
1 | ssize_t send(int sockfd, const void* buf, size_t len, int flags); |
示例:
1 | char buf[1024]; |
注意:
recv()返回0表示对端关闭连接send()可能只发送部分数据- 需要考虑
EINTR、EAGAIN
sendto() / recvfrom()
UDP 数据发送和接收。
1 | ssize_t sendto( |
close()
关闭 Socket。
1 | close(sockfd); |
setsockopt()
设置 Socket 选项。
常见用途:
端口复用
1 | int opt = 1; |
禁用 Nagle 算法
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 tsengcode!



