2014-3-16
简单说明,不求甚解
(1) int socket (int family, int type,int protocol)
若成功则为非负描述符(套接字描述符),若出错则为-1
@ family : 协议族
AF_INET IPv4 协议
AF_INET6 IPv6 协议
@ type : 套接字类型
SOCK_STREAM : 字节流套接字
SOCK_DGRAM : 数据报套接字
@ protocol : 暂时设为0
(2) int bind(int sockfd,const sockaddr * myaddr, socklen_t addrlen)
若成功则为0,出错为-1
@ myaddr : 指向特定于协议的地址结构的指针
对于IPv4 来说 是 struct sockaddr_in (netinet/in.h)
bind 可以指定IP地址或端口,可以两者都指定,也可以都不指定。IPv4 通配地址有常值INADDR_ANY来指定。如,
struct sockaddr_in servaddr;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY) /* wildcard */
IPv4 : sockaddr_in
struct in_addr {
in_addr_t s_addr; /* 32-bit IPv4 address */
/* network byte ordered */
};
struct sockaddr_in {
uint8_t sin_len; /* length of structure (16) */
sa_family_t sin_family; /* AF_INET */
in_port_t sin_port; /* 16-bit TCP or UDP port number */
struct in_addr sin_addr; /* 32-bit IPv4 address */
char sin_zero[8]; /* unused */
};
(3) int listen(int sockfd, int backlog)
成功返回0,失败-1
(4) int accept(int sockfd, struct sockaddr *cliddr, socklen_t * addrlen)
若成功则为非负描述符,若出错为-1
返回值代表与客户的TCP链接
(待续)