Chinaunix首页 | 论坛 | 博客
  • 博客访问: 285985
  • 博文数量: 89
  • 博客积分: 1380
  • 博客等级: 中尉
  • 技术积分: 705
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-10 11:04
文章分类

全部博文(89)

文章存档

2014年(4)

2011年(1)

2010年(42)

2009年(42)

我的朋友

分类: LINUX

2009-07-10 11:42:15

Sockfd是调用socket函数返回的socket描述符,my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针;addrlen常被设置为sizeof(struct sockaddr)。  
  struct sockaddr结构类型是用来保存socket信息的:  
  struct sockaddr {  
   unsigned short sa_family; /* 地址族, AF_xxx */  
char sa_data[14]; /* 14 字节的协议地址 */  
};  
  sa_family一般为AF_INET,代表Internet(TCP/IP)地址族;sa_data则包含该socket的IP地址和端口号。  
  另外还有一种结构类型:  
  struct sockaddr_in {  
   short int sin_family; /* 地址族 */  
   unsigned short int sin_port; /* 端口号 */  
   struct in_addr sin_addr; /* IP地址 */  
   unsigned char sin_zero[8]; /* 填充0 以保持与struct sockaddr同样大小 */  
  };  
  这个结构更方便使用。sin_zero用来将sockaddr_in结构填充到与struct sockaddr同样的长度,可以用bzero()或memset()函数将其置为零。指向sockaddr_in 的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr时,你可以在函数调用的时候将一个指向sockaddr_in的指针转换为指向sockaddr的指针;或者相反。

你只要记住,填值的时候使用sockaddr_in结构,而作为函数的
参数传入的时候转换成sockaddr结构就行了,毕竟都是16个字符
长。

struct in_addr {
          union {
                  struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
                  struct { u_short s_w1,s_w2; } S_un_w;
                  u_long S_addr;
          } S_un    };

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