Skip to content

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函数

Int socket(int domain, int type, int protocol)  

5. setsockopt函数

Int setsockopt(SOCKET s, int level, int optname, const char FAR *optval, int optlen)
  • s:socket描述符
  • Level:选项级别,SOL_SOCKET/IPPROTO_TCP
  • Optname:需要设置的选项
  • optval:只想存放选项的指针
  • Optlen:缓冲区长度