so_reuseaddr 예제

Windows Vista 및 이후에서 IPv6 및 IPv4를 통해 작동하는 듀얼 스택 소켓을 만들 수 있습니다. 이중 스택 소켓이 와일드카드 주소에 바인딩되면 지정된 포트는 IPv4 및 IPv6 네트워킹 스택과 SO_REUSEADDR 및 SO_EXCLUSIVEADDRUSE(설정된 경우)와 관련된 검사 모두에 예약됩니다. 이러한 검사는 두 네트워킹 스택에서 모두 성공해야 합니다. 예를 들어 이중 스택 TCP 소켓이 SO_EXCLUSIVEADDRUSE를 설정하고 포트 5000에 바인딩하려고 하면 이전에는 포트 5000에 바인딩할 수 없습니다(와일드카드 또는 특정). 이 경우 IPv4 TCP 소켓이 포트 5000의 루프백 주소에 이전에 바인딩된 경우 이중 스택 소켓에 대한 바인딩 호출이 WSAEACCES에서 실패합니다. SO_REUSEADDR 소켓 옵션을 사용하면 소켓이 다른 소켓에서 사용 중인 포트에 강제로 바인딩할 수 있습니다. 두 번째 소켓은 원래 소켓과 동일한 포트에서 바인드를 호출하기 전에 optname 매개 변수가 SO_REUSEADDR로 설정되고 optval 매개 변수가 TRUE의 부울 값으로 설정된 setockopt을 호출합니다. 두 번째 소켓이 성공적으로 바인딩되면 해당 포트에 바인딩된 모든 소켓에 대한 동작은 확정되지 않습니다. 예를 들어 동일한 포트의 모든 소켓이 TCP 서비스를 제공하는 경우 포트를 통해 들어오는 TCP 연결 요청은 올바른 소켓에서 처리될 수 있다고 보장할 수 없습니다. 악성 프로그램은 SO_REUSEADDR을 사용하여 이러한 서비스에 대한 액세스를 거부하기 위해 표준 네트워크 프로토콜 서비스에 이미 사용 중인 소켓을 강제로 바인딩할 수 있습니다.

이 옵션을 사용하려면 특별한 권한이 필요하지 않습니다. 모든 서버 응용 프로그램은 강력한 수준의 소켓 보안을 위해 SO_EXCLUSIVEADDRUSE를 설정해야 합니다. 악성 소프트웨어가 포트를 하이재킹하는 것을 방지할 뿐만 아니라 다른 응용 프로그램이 요청된 포트에 바인딩되어 있는지 여부도 나타냅니다. 예를 들어, 다른 프로세스가 현재 특정 인터페이스에서 동일한 포트에 바인딩된 경우 SO_EXCLUSIVEADDRUSE 소켓 옵션 집합이 있는 프로세스로 와일드카드 주소에 바인딩하는 호출이 실패합니다. 예를 들어 첫 번째 호출자가 특정 주소에 SO_EXCLUSIVEADDRUSE를 설정하고 두 번째 호출자가 동일한 포트에서 와일드카드 주소로 바인딩을 호출하려고 하면 두 번째 바인딩 호출이 성공합니다.

© 2019 A MarketPress.com Theme