"동일한 소켓을 참조하는 여러 파일 설명자"는 어떻게 생성됩니까?

"동일한 소켓을 참조하는 여러 파일 설명자"는 어떻게 생성됩니까?

Linux 프로그래밍 인터페이스는 다음과 같이 말합니다.

56.5.5 연결 종료: close()

스트림 소켓 연결을 종료하는 일반적인 방법은 close()를 호출하는 것입니다. 만약에여러 파일 설명자가 동일한 소켓을 참조합니다., 그러면 연결이 종료됩니다모든 설명자닫은.

커널은 소켓에 어떤 데이터 구조를 사용합니까? 일반 파일과 유사합니까?

  • 파일 설명자 테이블
  • 파일 설명 테이블
  • 가상 노드 테이블?

"여러 파일 설명자가 동일한 소켓을 참조합니다"는 "여러 파일 설명자가 동일한 소켓 설명을 참조합니다"와 같은 의미입니까?

"동일한 소켓을 참조하는 여러 파일 설명자"는 어떻게 생성됩니까? dup()소켓 특정 기능에 의해 생성됩니까 ?

이전에 소켓에 ​​대한 두 가지 다른 정의를 본 적이 있습니다.

  • 소켓은 포트(TCP 포트, UDP 포트)와 동일합니다.

  • TCP 소켓은 연결로 식별되므로 여러 소켓이 동일한 TCP 포트에 해당할 수 있습니다. (이것은 소켓 API에서 사용되는 정의인 것 같습니다)

"여러 파일 설명자가 동일한 소켓을 참조합니다"의 참조에서 사용되는 소켓 정의는 무엇입니까?

답변1

간단한 대답은 파일 설명자가 실제 소켓에 대한 참조일 뿐이라는 점을 기억하는 것입니다. 동일한 소켓을 참조하는 여러 파일 설명자가 있을 수 있습니다. 참조 카운트는 마지막 참조가 제거될 때 소켓을 종료하는 데 사용됩니다.

그렇습니다. dup(2)소켓 파일 설명자를 사용할 수 있습니다.

더 긴 설명은 파일 설명자가 커널 inode에 대한 사용자 공간 핸들일 뿐이라는 것입니다. 커널에는 더 높은 수준의 일반 소켓 인터페이스인 struct inode커널에 대한 포인터가 있습니다 . 이 구조에는 실제 TCP/IP 소켓인 struct socket하위 수준에 대한 포인터가 있습니다 . struct sock다른 주소 계열에 대한 소켓을 가질 수 있다는 점을 기억하십시오. 이 설명은 여전히 ​​다소 단순화되어 있습니다.

마지막 질문에 답하려면 두 정의 모두 인용에 적합합니다.

이 블로그 게시물은 실제로 소켓을 생성하고 파일 설명자를 할당하는 프로세스의 일부를 아주 잘 설명합니다.https://ops.tips/blog/how-linux-creates-sockets/

관련 정보