소켓 프로그래밍 - listen()과 accept()의 차이점은 무엇입니까?
소켓 프로그래밍에 대해 배우기 위해 이 튜토리얼을 읽고 있습니다.보아하니..listen()
그리고.accept()
은 둘 다합니다. 즉, 으로 될 때까지 것입니다. 차단하고 클라이언트가 소켓에 연결될 때까지 기다립니다.socket()
을 위해두 한 이유는 무엇입니까?이를 위해 두 단계가 필요한 이유는 무엇입니까?시스템 호출을 한 번만 사용하는 것이 어떻습니까?
그런데, 저는 이 질문에 대해 구글 검색을 해보고 비슷한 질문을 찾았지만, 만족스러운 답은 하나도 없었습니다.예를 들어, 그들 중 한 명이 말했습니다.accept()
소켓이 생성된다는 것을 알고 있기 때문에, 말도 안 되는 것은 소켓이 생성된다는 것을 알고 있기 때문입니다.socket()
.
그listen()
으로 내부 하는데, 이를 패시브 리스닝 소켓이라고 수 .accept
소켓이 클라이언트로부터 연결을 수신하기 시작할 수 있도록 바인딩된 포트를 엽니다.
그accept()
함수는 수신 소켓에 다음 수신 연결을 수락하고 해당 연결에 대한 소켓 설명자를 반환하도록 요청합니다.그래서, 어떤 의미에서,accept()
소켓을 생성합니다. 사용하는 소켓이 아닙니다.listen()
의 수신 연결에 사용됩니다.
그것은 모두 역사적인 설정의 일부입니다. listen
번 을 준비합니다.accept
Listen은 또한 백로그를 설정할 수 있게 해줍니다. 백로그는 시스템에 의해 허용될 연결의 수를 설정하고 프로그램이 정말로 허용될 때까지 기다립니다.밀린 일이 가득 찬 후에 오는 모든 것은 시스템에서 즉시 거부됩니다. listen
차단하지 반면에accept
다음 연결이 이루어질 때까지 (소켓이 비슬롯 모드가 아닌 경우) 차단합니다.분명히, 이것은 두 개의 별개의 기능일 필요는 없습니다 - 그것은 생각할 수 있습니다.accept()
것을 할 수 .listen
그렇습니다.
위의 두 답변은 수락과 경청의 차이를 명확하게 설명합니다.다른 질문에 답하자면, 왜 우리는 두 개의 별도 기능이 필요합니까?
한 가지 사용 사례는 예를 들어 포트가 여전히 사용 가능한지 또는 포트에 액세스할 수 있는지 여부만 테스트하려는 경우 포트를 청취한 다음 연결을 수락하지 않고 포트를 닫으면 됩니다.
예: https://github.com/coolaj86/golang-test-port 의 경우 수신 대기 호출을 사용하여 포트의 가용성을 테스트합니다.
listen()
대기 중인 최대 연결 수를 지정하는 백로그 매개 변수를 사용하며 0 이상이어야 합니다.서버가 동시에 많은 연결 요청을 수신함에 따라 값이 증가합니다.
accept()
수신 연결을 기다립니다.클라이언트가 연결되면 연결을 나타내는 새 소켓 개체를 반환합니다.
주의해야 할 또 다른 중요한 점입니다.accept()
클라이언트와 통신하는 데 사용할 새 소켓 개체를 만듭니다.서버가 새 연결을 허용하기 위해 사용하는 수신 소켓과 다릅니다.
응용 프로그램과 TCP/IP 소켓 인터페이스 간의 각 연결당 허용되는 최대 소켓 수는 65535개입니다.
언급URL : https://stackoverflow.com/questions/34073871/socket-programming-whats-the-difference-between-listen-and-accept
'source' 카테고리의 다른 글
Oracle DB & SQL Developer: "Error report: execution completed with warning" - 경고를 보려면 어떻게 해야 합니까? (0) | 2023.07.01 |
---|---|
"#define for if (false) {} other for"에 사용할 수 있는 것은 무엇입니까? (0) | 2023.07.01 |
Oracle에서 FK 삭제 규칙을 삭제하거나 다시 만들지 않고 변경하시겠습니까? (0) | 2023.07.01 |
FCM이 MismatchSenderId를 가져오는 중 (0) | 2023.07.01 |
Spring MongoRepository가 삽입하는 대신 업데이트 중이거나 다시 시작되고 있습니다. (0) | 2023.07.01 |