Lomo's BLOG

行之而不著焉 习矣而不察焉 终身由之而不知其道也 众也 ~
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

《Unix网络编程 - 基本套接口编程》

Posted on 2006-04-15 15:38  Lomo  阅读(402)  评论(0)    收藏  举报

1_通用套接口定义:

struct sockaddr
{
uint8_t sa_len;
sa_family_t sa_family;
char sa_data[14];
}

套接口函数常常被定义成使用指向套接口结构的指针,这要求对这些函数任何时候的调用都必须将指向特定于协议的套接口地址转换成指向通用套接口结构的指针类型:

struct sockaddr_in serv;/*IPV4 socket address structure*/
/*fill in serv{}*/
bind(sockfd,(
struct sockaddr *)&serv,sizeof(serv));

这样的做法是非常必须的.

2_值结果参数:

从进程到内核传递套接口指针有三个函数: bind , connect , sendto . 这三个函数的参数是指向套接口的指针和结构整数大小. 其中,从进程拷贝数据到内核的size是已知的;

从内核到进程传递套接口指针有四个函数: accept , recvfrom , getsockname , getpeername . 它们的参数是指向套接口的指针和指向结构大小的指针. 之所以利用指向大小的指针作为参数是考虑到在函数被调用时, 参数标识大小值, 而函数返回时,将会把实际存储的数据大小返回到参数, 确切的讲,是基于值结果参数的考虑.

3_网际协议在处理这些多字节整数时,采用大端字节序. 四个有关函数: htons(...) , htonl(...)  , ntohs(...) , ntohl(...).

4_inet_aton , inet_addr对十进制IP字符进行转换, 产生与其对应的二进制IP地址. 唯一不同的是, inet_addr将32位二进制值返回,而inet_aton则利用直结果参数.

inet_ntoa将32位二进制转换为点分十进制IP,值得一提的是,函数将返回值送入静态内存单元中,这决定了函数将是不可重入的.

5_inet_ntop & inet_pton函数.

6_当我们对字节流套接口进行读写时利用readn(...) & writen(...)从一个描述苻读写n个字节 , readline(...)从一个描述苻字节读一个文本行,一次一个字节.