1.字节序

网络协议使用‘大端字节序’(起始地址存的高序字节)来传送这些多字节整数。

#include<netinet/in.h>uint16_thtons(uint16_thost16bitvalue);uint32_thtonl(uint32_thost32bitvalue);uint16_tntohs(uint16_tnet16bitvalue);uint32_tntohl(uint32_tnet32bitvalue);2.点分十进制的ASCII码字符串和32位的网络字节序二进制值间转换IPv4地址

//下面两个函数淘汰,写出来帮忙过渡记忆

#include<arpa/inet.h>//字符串符串有效则返回1,否则0//不足:出错时addrptr返回INADDR_NONE(32位1),又有手册称返回-1intinet_aton(constchar*strptr,structin_addr*addrptr);char*inet_ntoa(structin_addrinaddr);//不足:不可重入#include<arpa/inet.h>//优点:ipv4和ipv6都适合//p:presentationn:numeric//注意:成功返回1,输入格式无效返回0,出错返回-1;EAFNOSUPPORTintinet_pton(intfamily,constchar*strptr,void*addrptr);//成功返回指向结果的指针,出错返回NULL;ENOSPCconstchar*inet_ntop(intfamily,constvoid*addrptr,char*strptr,size_tlen);3. socket connect bind listen accept

#include<sys/socket.h>intsocket(intfamily,inttype,intprotocol)#include<sys/socket.h>;intconnect(intsockfd,conststructsockaddr*servaddr,socklen_taddrlen);//bind可以指定IP地址或端口,或两者都指定,或两者都不指定。//bind系统保留端口,需要root权限intbind(intsockfd,conststructsockaddr*myaddr,socklen_taddrlen);//返回套接字关联的本地协议地址intgetsockname(intsockfd,structsockaddr*localaddr,socklen_t*addrlen);//返回套接字关联的远程协议地址如accept返回的客户sockfd的对应地址intgetpeername(itnsockfd,structsockaddr*peeraddr,socklen_taddrlen);intlisten(intsockfd,intbacklog);//还是不明白backlog指定什么值比较好?//监听套接字维护两个队列:未完成连接队列(SYN_RCVD)和已完成连接队列(ESTABLISHED)intaccept(intlistenfd,structsockaddr*cliaddr,socklen_t*addrlen);

4.close fork

#include<unistd.h>intclose(intsockfd);/*fork调用一次,返回两次:调用进程返回子进程ID号,子进程返回0fork的两个用法:一是进程创建自身的一个副本;二是一个进程想要执行另一个程序,副本调用exec把自身替换成新的程序。*/pid_tfork(void);pid_tgetppid(void);//获得父进程ID