TCPIP编程
1、线程函数遇到错误时不设置unix标准errno值,而是作为函数返回值返回给调用者
2、MTU = MSS + IP头(20) + TCP头(20)
3、套接字地址结构:
通用套接字地址结构 struct sockaddr{ unit8_t sa_len; sa_family_t sa_family; /* AF_XXX */ char sa_data[14]; /* 协议地址 */ };
IPv4地址结构 struct in_addr{ in_addr_t s_addr; /* 32bit addr */ }; struct sockaddr_in{ unit8_t sin_len; sa_family_t sin_family; /* AF_INET */ in_port_t sin_port; struct in_addr sin_addr; };
通配地址 servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
4、字节序转换: htons htonl ntohs ntohl
5、地址转换函数:
int inet_pton(int family, const char *restrict str, void *restrict add); 字符串有效返回1,格式无效0,出错-1 const char *inet_ntop(int family, const char *restrict str, void *restrict add);
出错返回NULL
6、socket函数:
int socket(int family, int type, int protocol);
TCP: socket(AF_INET, SOCK_STREAM, 0);
UDP: socket(AF_INET, SOCK_DGRAM, 0);
7、connect函数:
int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);
8、bind函数:
int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);
9、listen函数:
int listen(int sockfd, int backlog);
10、accept函数:
int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);
11、返回套接字本端/对端地址
int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen); int getpeername(int sockfd, struct sockaddr *peeraddr, socklen_t *addrlen);
12、shutdown howto:SHUT_RD SHUT_WR SHUT_RDWR
int shutdown(int sockfd, int howto);
13、