• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

accept 함수에 대한 문의

19.12.10 15:38 작성 조회수 186

1

accept 함수부분 설명에서 두번째와 세번째 파라미터에 NULL을 준다고 하셨는데, 왜 NULL을 주는 건지? bind함수처럼 지정하면 안되는지 궁금합니다.

답변 1

답변을 작성해보세요.

0

두번째/세번째 파라미터(child socket address/length) 지정하셔도 됩니다!! 제가 준비한 예제에서 사용하지 않았을 뿐입니다.

소켓은 종단(endpoint)간의 연결 입니다. 그래서 양 끝 socket에 자신의 address가 있죠. 이 address가 소켓 통신에서 나와 상대방의 identification이 되는 것이죠. server는 반드시 자신의 address를 bind 해야 합니다. 그래야 client가 server로 접속할 수 있겠죠. 반면 client는 자신의 address를 bind 해도 되고, 하지 않아도 됩니다. 프로그램에서 명시적으로 설정하지 않았다면 커널이 자동(임의 설정)으로 해주기 때문이죠. 제가 준비한 예제에서는 client socket에 address를 명시적으로 설정하지 않습니다. 커널에게 맡긴 것이죠.

그렇기 때문에 server에서 accept() 할 때 client의 address를 받아오는 두번째/세번째 파라미터를 NULL로 입력한 것입니다. 받아와봐야 의미 없는 값(커널이 임의 설정한 값)이 나오기 때문입니다. 

예제를 수정하여 client socket에 address를 bind하고, server에서는 accept 시 child address를 받아오게 한다면 정상 동작할 것입니다. unix domain socket에서 child socket에  address를 지정해 연결하는 예제는 아래 링크를 참조해주세요

https://www.ibm.com/support/knowledgecenter/en/SSB23S_1.1.0.14/gtpc1/unixsock.html

좋은 질문 감사합니다~ :D