socket编程中常见的数据结构

【版权申明】转载请附上出处链接 

socket编程中常见的数据结构

struct addrinfo

#include <netdb.h>
socket 网络信息相关结构体:

/* Structure to contain information about address of a service provider.  */
struct addrinfo
{
  int ai_flags;                 /* Input flags.  */
  int ai_family;                /* Protocol family for socket.  */
  int ai_socktype;              /* Socket type.  */
  int ai_protocol;              /* Protocol for socket.  */
  socklen_t ai_addrlen;         /* Length of socket address.  */
  struct sockaddr *ai_addr;     /* Socket address for socket.  */
  char *ai_canonname;           /* Canonical name for service location.  */
  struct addrinfo *ai_next;     /* Pointer to next in list.  */
};
  • ai_flags,指定处理地址和主机名的方式
    在这里插入图片描述
  • ai_family,地址族。指定调用者期待返回的套接口地址结构的类型
    在这里插入图片描述
  • ai_socktype,socket的类型。
    在这里插入图片描述
  • ai_protocol,socket协议。
IPPROTO_IP0IP协议
IPPROTO_IPV44IPv4
IPPROTO_IPV641IPv6
IPPROTO_TCP6TCP
IPPROTO_UDP17UDP

struct sockaddr

bits/socket.h
通用的socket地址描述结构体:

/* Structure describing a generic socket address.  */
struct sockaddr
{
	__SOCKADDR_COMMON (sa_);    /* Common data: address family and length.  */
	char sa_data[14];           /* Address data.  */
};

其中的__SOCKADDR_COMMON (sa_);又可转变成:
#include<bits/sockaddr.h>

/* This macro is used to declare the initial common members
   of the data types used for socket addresses, `struct sockaddr',
   `struct sockaddr_in', `struct sockaddr_un', etc.  */
#define __SOCKADDR_COMMON(sa_prefix) \
  sa_family_t sa_prefix##family

即:
	sa_family_t sa_family;

struct sockaddr_in

#include<netinet/in.h>
与struct sockaddr结构体类似

/* Structure describing an Internet socket address.  */
struct sockaddr_in
{
	__SOCKADDR_COMMON (sin_);
	in_port_t sin_port;                 /* Port number.  */
	struct in_addr sin_addr;            /* Internet address.  */
	
	/* Pad to size of `struct sockaddr'.  */
	unsigned char sin_zero[sizeof (struct sockaddr) -
	                      __SOCKADDR_COMMON_SIZE -
	                      sizeof (in_port_t) -
	                      sizeof (struct in_addr)];
};

struct sockaddr_un

#include<sys/un.h>
与struct sockaddr结构体类似

/* Structure describing the address of an AF_LOCAL (aka AF_UNIX) socket.  */
struct sockaddr_un
{
	__SOCKADDR_COMMON (sun_);
	char sun_path[108];         /* Path name.  */
};

socklen_t

/* Duplicate info from sys/socket.h. bits/types.h */
__STD_TYPE __U32_TYPE __socklen_t;

/* Type for length arguments in socket calls. bits/socket.h */
#ifndef __socklen_t_defined
	typedef __socklen_t socklen_t;
	#define __socklen_t_defined
#endif

struct sockaddr_storage

bits/socket.h

struct sockaddr_storage
{
	__SOCKADDR_COMMON (ss_);    /* Address family, etc.  */
	char __ss_padding[_SS_PADSIZE];
	__ss_aligntype __ss_align;  /* Force desired alignment.  */
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安河桥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值