SOCKET 地址

地址格式:

 函数bind和getsockname使用通用数据类型:struct sockaddr*来指向socket地址。

#incude <sys/socket.h>

struct sockaddr {
    short int sa_family,
    char sa_data[14]
}

sa_family 指的是地址格式,

sa_data[14] 则是真正的地址内容。地址数据和格式挂钩的,什么样的格式对应什么样的内容。长度也依赖于格式,所以有可能大于14个字节。这里给出的14是任意的。。。。

以AF_开头的符号名指定了地址格式,而PF_开头的符号名指定了相应的命名空间。

AF_LOCAL

  LOCAL指明了是本地地址,使用的是本地命名空间(PF_LOCAL)。

AF_UNIX

  等同于AF_LOCAL。尽管AF_LOCAL被POSIX.1g强制要求,事实上AF_UNIX更具移植性。

AF_FILE

  AF_LOCAL的另一个近义词

AF_INET

  指明了地址位于Internet命名空间之下。PF_INET为其命名空间。

AF_INET6

  与AF_INET相似,特指IPv6协议,命名空间为PF_INET6。

AF_UNSPEC

  指明不使用特定的地址格式,很少情况下用这种地址格式。命名空间为PF_UNSPEC(只是为了完整性,才整出这么一个命名空间。

 

为socket设置地址:

  通过bind函数将地址绑定给某个socket。

#include <sys/socket.h>
int bind (int socket, struct sockaddr *addr, socklen_t length)

 

 

读取socket地址:

  使用函数getsockname 来检查Internet socket的地址。

#include <sys/scoket.h>
int getsockname (int socket, struct sockaddr *addr, socklen_t *length-ptr)

 

地址和地址长度通过*addr和*length-ptr返回。通常来讲,我们针对命名空间使用合适的数据类型申请空间来存放地址,然后将其强制转化为sockaddr *类型。

 

posted @ 2016-08-08 22:48  三复苏  阅读(1715)  评论(0编辑  收藏  举报