头文件<netinet/in.h>定义了
struct in_addr
{
in_addr_t s_addr;//网络ip地址,网络字节序;
}
常用套接口地址结构
struct sockaddr_in
{
uint8_t sin_len;
sa_family_t sin_family;
in_port sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}
长度成员可以不用管它,只有涉及到路由套接口时才用。
通用套接口地址结构<sys/socket.h>
struct sockaddr
{
uint8_t sa_len;
sa_family_t sa_family;
char sa_data[14];
}
为了在后面套接口函数使用套接口指针,所以定义了一个通用的套接口,使用时必须强制转换,因为通用的指针类型void * 的实现是在他们之后,所以不能自动转换。
struct sockaddr_in serv;
。。。。。
bind(sockfd,(struct sockaddr *)&serv,sizeof(serv));
bind connect sendto 从进程向内核传递数据;
accept recvfrom getsockname getpeername从内核到进程,传递的是值-结果类型。
getpeername(unixfd,(sa *)&client,&len)值结果的例子。
网络字节序调整函数
uint16_t htons(uint16_t a);//本地到网络
uint32_t htonl(uint32_t b);
uint16_t ntohs(uint16_t a);//网络到本地
uint32_t ntohl(uint32_t b);
操作内存函数
void bzero(void *dest, size_t len);将目标中指定字节长度的空间全部清零;
void bcopy(const void *src, void *dest, size_t len);
int bcmp(const void *ptr1,const void*ptr2, size_t len);//比较任意两个字符串,相同则为零,不同则非零。
void * memset(void *dest ,int c,size_t len);//把目标空间中len长度的空间设成c
void * memcpy(void *dest ,const void *src,size_t len);//和bcopy类似,但是交换了指针参数的位置,且源和目标不能重叠可以用memmove,bcopy可以。mem类函数设置最后一个总是长度。
int memcmp(const void *ptr1,const void *ptr2, size_t len);
inet_aton
inet_addr
inet_ntoa
最新的替代函数
inet_pton
inet_ntop