API整理
int socket(int domain, int type, int protocol)
参数 | 类型 | 说明 |
---|---|---|
domain | 确定套接字的通信领域(domain) | IPV4(AF_INET),IPv6(AF_INET6) |
type | 决定套接字数据传输的意义 | SOCK_STREAM可靠,SOCK_DGRAM |
protocol | 指定端到端的协议 | IPPROT_TCP.IPPROTO_UDP |
链接
int connect(int socket, const struct sockaddr *foreignAddress, socklen_t addressLength)
绑定端口
int bind(int socket, struct sockaddr * localAddress, socklen_t addressSize)
处理进入的连接
int listen(int socket, int queueLimit)
接受同意的accept
int accept(int socket, struct sockaddr *clientAddress, socklen_t * addressLength)
发送
ssize_t send(int socket, const void *msg, size_t msgLength, int flags)
ssize_t recv(int socket, void *rcvBuffer, size_t bufferLength, int flags)
通用地址
struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
}
ipv4 地址
struct in_addr {
unit32_t s_addr;
}
struct sockaddr_in {
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}
ipv6的地址
struct in_addr {
unit32_t s_addr[16];
}
struct sockaddr_in6 {
sa_family_t sin6_family;
in_port_t sin6_port;
unit32_t sin6_flowinfo;
struct in6_addr sin6_addr;
uint32_t sin6_scope_id;
}
绑定地址时,用sockaddr 强制把 ipv4 和ipv6 强制转化
2进制/ 字符串地址转换
int inet_pton(int addressFamily, const char *src, void *dst)
// addressFamily 地址协议组
// src 需要转化的地址
// dst 储存转化成功的地址
const char * inet_ntop(int addressFamily, const void *src, char *dst, socklen_t dstBytes)
// addressFamily 地址协议组
// src 指向包含要转化的数字地址的内存块的第一个字节
// dst 参数包含调用者的空间中分配的缓冲区,把得到的字符串复制到其中
网友评论