에 대한 정보입니다 AF_INET
.
동일한 호스트 내에서 통신하기 위해 AF_UNIX
소켓 파일 예제를 만듭니다./tmp/name_of_the_socket_file
AF_INET
, 소켓 파일을 만들어야 합니까 ?
AFAIK, 소켓 파일을 만들 필요가 없으며 AF_INET
간단한 클라이언트 및 서버 모델과 통신할 수 있습니다.
내 동료가 IP 주소를 파일 이름으로 사용하여 소켓 파일을 만들어야 한다고 말했습니다 AF_INET
. 이해가 안 되지만 누군가 나를 명확히 설명할 수 있습니까?
답변1
동료들은 나에게 필요하다고 말했다.
AF_INET
당신의 동료가 틀렸다. 맨페이지를 살펴보세요bind(2)
다양한 소켓 유형에 규칙이 있음을 알 수 있습니다.
이름 바인딩에 사용되는 규칙은 주소 계열에 따라 다릅니다. 자세한 내용은 섹션 7의 수동 항목을 참조하세요. 에 대해서는 를
AF_INET
참조 하고 에 대해서는 를 참조 하십시오 .ip(7)
AF_INET6
ipv6(7)
AF_UNIX
packet(7)
AF_X25
x25(7)
AF_NETLINK
netlink(7)
너는 보게 될 것이다ip(7)
파일을 생성할 수 있는 호출은 없습니다 AF_INET
. 그리고 이 멋진 것IBM 논문이 소켓 구조와 그에 대한 일부 역사에 대해 설명합니다. 레거시 구조 형식(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];
};
현재 구조:
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 */
};
파일 생성에 대한 언급은 없습니다.
다른 부분에서 인용ip(7)
이 소켓( AF_INET
)이 어떻게 작동하는지에 대한 매뉴얼 페이지:
프로세스가 새로 들어오는 패킷이나 연결을 수신하려면 소켓을 로컬 인터페이스 주소에 바인딩해야 합니다
bind(2)
. 이 경우 하나의 IP 소켓만 지정된 로컬(주소, 포트) 쌍에 바인딩될 수 있습니다. 바인딩 호출에 지정 되면INADDR_ANY
소켓은 모든 로컬 인터페이스에 바인딩됩니다.listen(2)
바인딩되지 않은 소켓에서 호출 되면 소켓은 로컬 주소가 로 설정된 임의의 사용 가능한 포트에 자동으로 바인딩됩니다INADDR_ANY
. 바인딩되지 않은 소켓에서 호출 되면connect(2)
소켓은 임의의 사용 가능한 포트 또는 로컬 주소가 설정된 사용 가능한 공유 포트에 자동으로 바인딩됩니다INADDR_ANY
.
--전단--
주소 형식
IP 소켓 주소는 IP 인터페이스의 조합으로 정의됩니다. 주소와 16비트 포트 번호.기본 IP 프로토콜은 포트 번호를 제공하지 않으며 udp(7) 및 tcp(7)와 같은 상위 수준 프로토콜로 구현됩니다. 원시 소켓에서는 sin_port가 IP 프로토콜로 설정됩니다.
하지만 당신이 보면unix(7)
AF_UNIX
맨페이지에서는 소켓 유형과 기본 구조의 몇 가지 예를 볼 수 있습니다. 소켓 파일 경로라는 필드 도 있습니다 sun_path
(아래 관련 항목 참조).
#define UNIX_PATH_MAX 108
struct sockaddr_un {
sa_family_t sun_family; /* AF_UNIX */
char sun_path[UNIX_PATH_MAX]; /* pathname */
};
TL, 박사: AF_UNIX
소켓(파일 사용)과 AF_INET
IP 주소 바인딩 및 다양한 형식(유니캐스트, 멀티캐스트, 브로드캐스트...)으로 통신을 생성하는 데 사용됩니다.
관련 정보: