Chinaunix首页 | 论坛 | 博客
  • 博客访问: 416299
  • 博文数量: 68
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 671
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-11 13:36
文章分类

全部博文(68)

文章存档

2010年(14)

2009年(7)

2008年(47)

我的朋友

分类: 系统运维

2008-10-16 11:58:33

hostent
 
#include
#include

/* Description of data base entry for a single host. */
struct hostent
{
  char *h_name; /* Official name of host. */
  char **h_aliases; /* Alias list. */
  int h_addrtype; /* Host address type. */
  int h_length; /* Length of address. */
  char **h_addr_list; /* List of addresses from name server. */
#define h_addr h_addr_list[0] /* Address, for backward compatibility. */
};

sockaddr and sockaddr_in

#include

struct sockaddr_in {
        short int sin_family; /* Address family */
        unsigned short int sin_port; /* Port number */
        struct in_addr sin_addr; /* Internet address */
        unsigned char sin_zero[8]; /* Same size as struct sockaddr */
    };

struct sockaddr {
        unsigned short sa_family; /* address family, AF_xxx */
        char sa_data[14]; /* 14 bytes of protocol address */
    };

struct in_addr {
unsigned long s_addr;
};

typedef struct in_addr {
union {
            struct{
                        unsigned char s_b1,
                        s_b2,
                        s_b3,
                        s_b4;
                        } S_un_b;
           struct {
                        unsigned short s_w1,
                        s_w2;
                        } S_un_w;
            unsigned long S_addr;
          } S_un;
} IN_ADDR;

sin_family指代协议族,在socket编程中选AF_INET
sin_port存储端口号(使用网络字节顺序)
sin_addr存储IP地址,使用in_addr这个数据结构
sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
s_addr按照网络字节顺序存储IP地址

sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可以指向
sockadd的结构体,并代替它。也就是说,你可以使用sockaddr_in建立你所需要的信息,
在最后用进行类型转换就可以了

bzero((char*)&sockfd,sizeof(mysock));//初始化
sockfd结构体名
sockfd.sa_family=AF_INET;
socdfd.sin_addr.s_addr=inet_addr("192.168.0.1");
……
等到要做转换的时候用:
(struct sockaddr*)sockfd

阅读(1688) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~