值0的套接字类型是什么类型?
What type is socket type of value 0?
我在 enum __socket_type
中看不到 socke 类型的值 0
:
socket_type.h:
/* Types of sockets. */
enum __socket_type
{
SOCK_STREAM = 1, /* Sequenced, reliable, connection-based
byte streams. */
#define SOCK_STREAM SOCK_STREAM
SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams
of fixed maximum length. */
#define SOCK_DGRAM SOCK_DGRAM
SOCK_RAW = 3, /* Raw protocol interface. */
#define SOCK_RAW SOCK_RAW
SOCK_RDM = 4, /* Reliably-delivered messages. */
#define SOCK_RDM SOCK_RDM
SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
datagrams of fixed maximum length. */
#define SOCK_SEQPACKET SOCK_SEQPACKET
SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */
#define SOCK_DCCP SOCK_DCCP
SOCK_PACKET = 10, /* Linux specific way of getting packets
at the dev level. For writing rarp and
other similar things on the user level. */
#define SOCK_PACKET SOCK_PACKET
/* Flags to be ORed into the type parameter of socket and socketpair and
used for the flags parameter of paccept. */
SOCK_CLOEXEC = 02000000, /* Atomically set close-on-exec flag for the
new descriptor(s). */
#define SOCK_CLOEXEC SOCK_CLOEXEC
SOCK_NONBLOCK = 00004000 /* Atomically mark descriptor(s) as
non-blocking. */
#define SOCK_NONBLOCK SOCK_NONBLOCK
};
但是如果我不指定 addrinfo
struct 字段 ai_socktype
会怎样?那么这个值就是0
,那是什么类型,当__socktype_type
没有这个类型的时候?
对 ai_socktype
使用 0
表示“任何类型”。
从 the manual page 到 getaddrinfo
:
The hints argument points to an addrinfo structure that specifies
criteria for selecting the socket address structures returned in
the list pointed to by res. If hints is not NULL it points to an
addrinfo structure whose ai_family, ai_socktype, and ai_protocol
specify criteria that limit the set of socket addresses returned
by getaddrinfo(), as follows:
[...]
ai_socktype
This field specifies the preferred socket type, for
example SOCK_STREAM or SOCK_DGRAM. Specifying 0 in this
field indicates that socket addresses of any type can be
returned by getaddrinfo().
"在此字段中指定0
表示getaddrinfo()
可以返回任何类型的套接字地址。"
我在 enum __socket_type
中看不到 socke 类型的值 0
:
socket_type.h:
/* Types of sockets. */
enum __socket_type
{
SOCK_STREAM = 1, /* Sequenced, reliable, connection-based
byte streams. */
#define SOCK_STREAM SOCK_STREAM
SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams
of fixed maximum length. */
#define SOCK_DGRAM SOCK_DGRAM
SOCK_RAW = 3, /* Raw protocol interface. */
#define SOCK_RAW SOCK_RAW
SOCK_RDM = 4, /* Reliably-delivered messages. */
#define SOCK_RDM SOCK_RDM
SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
datagrams of fixed maximum length. */
#define SOCK_SEQPACKET SOCK_SEQPACKET
SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */
#define SOCK_DCCP SOCK_DCCP
SOCK_PACKET = 10, /* Linux specific way of getting packets
at the dev level. For writing rarp and
other similar things on the user level. */
#define SOCK_PACKET SOCK_PACKET
/* Flags to be ORed into the type parameter of socket and socketpair and
used for the flags parameter of paccept. */
SOCK_CLOEXEC = 02000000, /* Atomically set close-on-exec flag for the
new descriptor(s). */
#define SOCK_CLOEXEC SOCK_CLOEXEC
SOCK_NONBLOCK = 00004000 /* Atomically mark descriptor(s) as
non-blocking. */
#define SOCK_NONBLOCK SOCK_NONBLOCK
};
但是如果我不指定 addrinfo
struct 字段 ai_socktype
会怎样?那么这个值就是0
,那是什么类型,当__socktype_type
没有这个类型的时候?
对 ai_socktype
使用 0
表示“任何类型”。
从 the manual page 到 getaddrinfo
:
The hints argument points to an addrinfo structure that specifies
criteria for selecting the socket address structures returned in
the list pointed to by res. If hints is not NULL it points to an
addrinfo structure whose ai_family, ai_socktype, and ai_protocol
specify criteria that limit the set of socket addresses returned
by getaddrinfo(), as follows:
[...]
ai_socktype
This field specifies the preferred socket type, for
example SOCK_STREAM or SOCK_DGRAM. Specifying 0 in this
field indicates that socket addresses of any type can be
returned by getaddrinfo().
"在此字段中指定0
表示getaddrinfo()
可以返回任何类型的套接字地址。"