目录

- /*创建套接字*/
- int socket(int domain, int type, int protocol);
-
- /*绑定通信结构体*/
- int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
-
- /*监听套接字*/
- int listen(int sockfd, int backlog);
-
- /*处理客户端发起的连接,生成新的套接字*/
- int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
-
- /*向服务器发起连接请求*/
- int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
三元组【IP地址,端口,协议】
- //通用地址族结构体
-
- //sa_family
- AF_UNIX 使用本地域套接字的地址结构,用于本地通信
- AF_INET 使用IPv4的通信地址结构
- AF_INET6 使用IPv6的通信地址结构
- ....
-
- struct sockaddr {
- sa_family_t sa_family;
- char sa_data[14];
- }
-
- struct sockaddr_in {
- sa_family_t sin_family;
- in_port_t sin_port; //端口号
- struct in_addr sin_addr; //IP地址结构体
- };
-
- struct sockaddr {
- uint32_t s_addr; //IP地址结构体
- };
-
-
-
- //IPV6
- struct sockaddr_in6 {
- sa_family_t sin6_family;
- in_port_t sin6_port;
- uint32_t sin6_flowinfo;
- struct in_addr sin_addr;
- uint32_t sin6_scope_id;
- };
-
- struct sockaddr {
- unsigned char s6_addr[16];
- };
-
-
-
bind绑定中定义了一个通用结构体,通用结构体中可选IPV6、IPV4、本地,我们使用的 struct sockaddr_in或者struct sockaddr_in6可强制转换为通用结构体,以便适配不同结构体。其中ipv4、ipv6长度不一致,通过len参数区分。
流式套接字 (SOCK_STREAM) 提供可靠的、面向连接的通信流;它使用TCP,从而保证数据传输的可靠性和顺序性
数据报套接字 (SOCK_DGRAM) 定义了一种不可靠、面向无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证是可靠、无差错的。它使用数据报协议UDP
原始套接字(SOCK_RAW) 允许直接访问底层协议,如IP或ICMP,它功能强大但使用较为不便,主要用于协议开发。


建立连接 socket, bind, listen, accept
数据传送 read/write recv/send
连接释放 close shutdown

举例说明socket套接字常见API,及其功能