套接字API

<强> 1。字节序

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

# include & lt; netinet/in.h>

uint16_t htons (uint16_t host16bitvalue);

uint32_t htonl (uint32_t host32bitvalue);

uint16_t ntohs (uint16_t net16bitvalue);

uint32_t ntohl (uint32_t net32bitvalue);

<强> 2。点分十进制的ASCII码字符串和32位的网络字节序二进制值间转换IPv4地址

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

# include & lt; arpa/inet.h>

//字符串符串有效则返回1,否则0

//不足:出错时addrptr返回INADDR_NONE(32位1),又有手册称返回1

int inet_aton (strptr const char *, struct in_addr * addrptr);

char * inet_ntoa (struct in_addr inaddr);//不足:不可重入)

//优点:IPv4和ipv6都适合,

//p:表示n:数字

# include & lt; arpa/inet.h>

//注意:成功返回1,输入格式无效返回0,出错返回1;EAFNOSUPPORT

int inet_pton (int家庭,const char * strptr, void * addrptr);

//成功返回指向结果的指针,出错返回零;ENOSPC

const char * inet_ntop (int家庭,const void * addrptr, char * strptr, size_t len);

<强> 3。套接字

# include & lt; sys/socket.h>

int插座(int, int类型,int协议),

int连接(int sockfd, const struct sockaddr * servaddr socklen_t就奇怪),

//绑定可以指定IP地址或端口,或两者都指定,或两者都不指定。

//绑定系统保留端口,需要根权限

int绑定(int sockfd, const struct sockaddr * myaddr socklen_t就奇怪),

//返回套接字关联的本地协议地址

int getsockname (int sockfd, struct sockaddr * localaddr socklen_t *就奇怪),

//返回套接字关联的远程协议地址如接受返回的客户sockfd的对应地址

int getpeername (itn sockfd, struct sockaddr * peeraddr socklen_t就奇怪),

int听(int, int sockfd积压);//还是不明白积压指定为什么样的值比较好吗?

监听套接字维护两个队列:未完成连接队列(SYN_RCVD)和已完成连接队列(建立)。

int接受(int listenfd, struct sockaddr * cliaddr socklen_t *就奇怪),

<强> 4。建立连接后

# include & lt; unistd.h>

int关闭(int sockfd);

/*

叉调用一次,返回两次:调用进程返回子进程ID号,子进程返回0

叉的两个用法:一是进程创建自身的一个副本;二是一个进程想要执行另一个程序,副本调用exec把自身替换成新的程序。

*/

pid_t叉(空白);

pid_t getppid(空白);//获得父进程ID


套接字API