| 功能 | Linux/Unix/macOS 接口(参数说明/可选项) | Windows 接口(参数说明/可选项) | 参数详细说明与可选 flags |
|---|---|---|---|
| 创建套接字 | int socket(int domain, int type, int protocol) | SOCKET socket(int af, int type, int protocol) | domain/af: AF_INET, AF_INET6等;type: SOCK_STREAM/UDP等;protocol常为0 |
| 关闭套接字 | int close(int sockfd) | int closesocket(SOCKET s) | sockfd/s: 套接字描述符/句柄 |
| 绑定地址 | int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) | int bind(SOCKET s, const struct sockaddr *name, int namelen) | addr: 地址结构体指针;addrlen: 结构体大小 |
| 监听 | int listen(int sockfd, int backlog) | int listen(SOCKET s, int backlog) | backlog: 连接等待队列长度 |
| 等待连接 | int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) | SOCKET accept(SOCKET s, struct sockaddr *addr, int *addrlen) | addr: 客户端地址输出;addrlen: 地址结构体长度 |
| 发起连接 | int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen) | int connect(SOCKET s, const struct sockaddr *name, int namelen) | addr/name: 目标服务器地址结构体 |
| 数据发送 | ssize_t send(int sockfd, const void *buf, size_t len, int flags) | int send(SOCKET s, const char *buf, int len, int flags) | flags参数如下: Linux: MSG_OOB, MSG_DONTROUTE, MSG_NOSIGNAL等 Windows: MSG_OOB, MSG_DONTROUTE 等 均支持0表示无额外标志 |
| 数据接收 | ssize_t recv(int sockfd, void *buf, size_t len, int flags) | int recv(SOCKET s, char *buf, int len, int flags) | flags参数如下: Linux: MSG_PEEK(只读取不移除), MSG_OOB, MSG_WAITALL等 Windows: MSG_PEEK, MSG_OOB等 |
| 数据接收自指定地址 | ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen) | int recvfrom(SOCKET s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen) | src_addr/from: 发送方地址输出;flags含义同recv;addrlen:地址大小 |
| 数据发送到指定地址 | ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen) | int sendto(SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen) | dest_addr/to: 目标地址;addrlen/tolen: 地址大小;flags同send |
| getsockopt | int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen) | int getsockopt(SOCKET s, int level, int optname, char *optval, int *optlen) | level: 选项级别如SOL_SOCKET;optname: 选项名如SO_RCVBUF等 optval: 存储选项值 optlen: 值缓冲区大小 |
| setsockopt | int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen) | int setsockopt(SOCKET s, int level, int optname, const char *optval, int optlen) | 级别与选项名和getsockopt一致;optval: 欲设置的值 optlen: 值长度 |
| 获取本地绑定地址 | int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen) | int getsockname(SOCKET s, struct sockaddr *name, int *namelen) | 获取本地绑定地址;addr/name: 输出结构体;addrlen/namelen:结构体长度 |
| 获取对端地址 | int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen) | int getpeername(SOCKET s, struct sockaddr *name, int *namelen) | 获取对端地址;参数含义同getsockname |
| 地址文本转二进制 | int inet_pton(int af, const char *src, void *dst) | int inet_pton(int af, PCSTR src, PVOID dst)(Vista起) | af: AF_INET或AF_INET6, src: IP文本, dst: 输出结构体 |
| 地址二进制转文本 | const char *inet_ntop(int af, const void *src, char *dst, socklen_t size) | PCSTR inet_ntop(int af, const void *src, PSTR dst, size_t size)(Vista起) | src: 网络序地址, dst: 输出缓冲区, size: 缓冲区大小 |
flags 参数说明
- send/recv/sendto/recvfrom 的 flags 常见值及平台支持:
MSG_OOB:发送/接收紧急数据,Unix/Windows均支持MSG_PEEK:仅查看数据不移除,Unix/Windows均支持MSG_DONTROUTE:发送时不经过路由表,Unix/Windows支持MSG_NOSIGNAL:发送时不触发SIGPIPE,Unix/Linux支持(Windows无此项)MSG_WAITALL:recv时等待直到填满缓冲区,Unix/Linux支持(Windows有限支持)- 其他详见各自平台
sockets文档:Linux man send(2)、Windows MSDN send/recv 文档。
getsockopt/setsockopt 常见选项示例
SOL_SOCKET(级别):SO_RCVBUF:接收缓冲区大小SO_SNDBUF:发送缓冲区大小SO_REUSEADDR:地址复用(Win下部分语义不同)SO_KEEPALIVE:心跳保活等
- 选项值类型通常为 int,optval 指针指向此变量,optlen为sizeof(int)。
1万+

被折叠的 条评论
为什么被折叠?



