My colleague told me I need to create socket file for the
AF_INET
Seu colega está errado. Dando uma olhada nas páginas de manual de bind(2)
você pode ver que diferentes tipos de soquete têm regras:
The rules used in name binding vary between address families. Consult the manual entries in Section 7 for detailed information. For
AF_INET
, seeip(7)
; forAF_INET6
, seeipv6(7)
; forAF_UNIX
, seepacket(7)
; forAF_X25
, seex25(7)
; and forAF_NETLINK
, seenetlink(7)
.
Você verá no ip(7)
que não há nenhuma invocação envolvendo AF_INET
que possa criar um arquivo . Há também este excelente documento da IBM sobre essa estrutura de soquete e um pouco da história sobre isso . Forma de estrutura legada (BSD 4.4 / Unix 98):
struct sockaddr_in {
uint8_t sin_len;
sa_family_t sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
Estrutura atual:
struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_INET */
in_port_t sin_port; /* port in network byte order */
struct in_addr sin_addr; /* internet address */
};
/* Internet address. */
struct in_addr {
uint32_t s_addr; /* address in network byte order */
};
Veja, nenhuma menção à criação de arquivos.
Citando outra parte do ip(7)
manpages sobre como esse tipo de soquete ( AF_INET
) funciona:
When a process wants to receive new incoming packets or connections, it should bind a socket to a local interface address using
bind(2)
. In this case, only one IP socket may be bound to any given local (address, port) pair. WhenINADDR_ANY
is specified in the bind call, the socket will be bound to all local interfaces. Whenlisten(2)
is called on an unbound socket, the socket is automatically bound to a random free port with the local address set toINADDR_ANY
. Whenconnect(2)
is called on an unbound socket, the socket is automatically bound to a random free port or to a usable shared port with the local address set toINADDR_ANY
.
- snip--
Address format
An IP socket address is defined as a combination of an IP interface address and a 16-bit port number. The basic IP protocol does not supply port numbers, they are implemented by higher level protocols like udp(7) and tcp(7). On raw sockets sin_port is set to the IP protocol.
Mas se você olhar para unix(7)
manpages você verá alguns exemplos de AF_UNIX
tipo de soquete e sua estrutura básica. Existe até um campo chamado sun_path
, que é o caminho para os arquivos de socket (veja Relacionado abaixo):
#define UNIX_PATH_MAX 108
struct sockaddr_un {
sa_family_t sun_family; /* AF_UNIX */
char sun_path[UNIX_PATH_MAX]; /* pathname */
};
tl, dr: AF_UNIX
é para sockets (e usam arquivos), enquanto AF_INET
é para ligação a endereços IP e para criar comunicações em suas várias formas (unicast, multicast, broadcast ...).
Itens relacionados: