Socket-初探¶
1. Socket()函数¶
(1). domain协议族:¶
1. AF_INET
2. AF_INET6
3. AF_LOCAL(AF_UNIX)
4. AF_ROUTE
(2). Type socket类型¶
1. SOCK_STREAM
2. SOCK_DGRAM
3. SOCK_RAW
4. SOCK_PACKET
5. SOCK_SEQPACKET
(3). Protocol协议¶
1. IPPROTO_TCP
2. IPPROTO_UDP
3. IPPROTO_STCP
4. IPPROTO_TIPC
2. Bind()函数¶
Int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
- Sockfd:socket描述符,唯一标识一个socket
- addrlen:地址长度
- addr:一个地址指针,指向要绑定给sockfd的协议地址
如ipv4对应的是:
struct sockaddr_in {
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
};
struct in_addr {
uint32_t s_addr;
};
ipv6对应的是:
struct sockaddr_in6 {
sa_family_t sin6_family;
in_port_t sin6_port;
uint32_t sin6_flowinfo;
struct in6_addr sin6_addr;
uint32_t sin6_scope_id;
};
struct in6_addr {
unsigned char s6_addr[16];
};
Unix域对应的是:
#define UNIX_PATH_MAX 108
struct sockaddr_un {
sa_family_t sun_family;
char sun_path[UNIX_PATH_MAX];
};
3. Listen() connect()函数¶
Int listen(int sockfd, int backlog)
Int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
- listen函数将socket创建的主动类型变为被动类型,等待client连接
4. accept函数¶
5. setsockopt函数¶
- s:socket描述符
- Level:选项级别,SOL_SOCKET/IPPROTO_TCP
- Optname:需要设置的选项
- optval:只想存放选项的指针
- Optlen:缓冲区长度