unix网络编程学习(1)

头文件定义了

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];

}

长度成员可以不用管它,只有涉及到路由套接口时才用。

通用套接口地址结构

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

你可能感兴趣的:(linux使用及系统编程)