다음을 통해 공유


전송 주소 공유

대부분의 경우 Winsock 커널(WSK) 애플리케이션은 다른 소켓에서 이미 사용 중인 로컬 전송 주소에 소켓을 바인딩할 수 없습니다. WSK 애플리케이션은 SO_EXCLUSIVEADDRUSESO_REUSEADDR 소켓 옵션을 사용하여 소켓이 바인딩된 로컬 전송 주소의 공유를 제어할 수 있습니다. 이러한 소켓 옵션은 기본적으로 소켓에 대해 설정되지 않습니다. 소켓 옵션 설정에 대한 자세한 내용은 소켓에서 제어 작업 수행을 참조하세요.

다음 표에서는 다른 소켓에서 이미 사용 중인 로컬 전송 주소에 두 번째 소켓을 바인딩한 결과를 보여줍니다. 와일드카드특정 사례는 소켓이 와일드카드 로컬 전송 주소 또는 특정 로컬 전송 주소에 바인딩되는지 여부를 지정합니다.

두 번째 바인딩 첫 번째 바인딩

소켓 옵션 없음(기본값)

SO_REUSEADDR

SO_EXCLUSIVEADDRUSE

와일드카드

특정

와일드카드

특정

와일드카드

특정

소켓 옵션 없음(기본값)

와일드카드

INUSE

SUCCESS

INUSE

SUCCESS

INUSE

SUCCESS

특정

CHECK

INUSE

CHECK

거부

거부

INUSE

SO_REUSEADDR

와일드카드

거부

SUCCESS

SUCCESS

SUCCESS

거부

SUCCESS

특정

CHECK

거부

SUCCESS

SUCCESS

거부

거부

SO_EXCLUSIVEADDRUSE

와일드카드

INUSE

INUSE

INUSE

INUSE

INUSE

INUSE

특정

CHECK

INUSE

CHECK

INUSE

거부

INUSE

결과는 다음과 같이 정의됩니다.

성공
두 번째 소켓에 대한 바인딩 작업이 성공합니다. WSK 하위 시스템은 STATUS_SUCCESS 상태 반환합니다.

INUSE
두 번째 소켓의 바인딩 작업이 실패합니다. WSK 하위 시스템은 STATUS_ADDRESS_ALREADY_EXISTS 상태 반환합니다.

거부
두 번째 소켓의 바인딩 작업이 실패합니다. WSK 하위 시스템은 STATUS_ACCESS_DENIED 상태 반환합니다.

확인
두 번째 소켓의 바인딩 작업이 성공하거나 실패하는지 확인하기 위해 액세스 검사 수행됩니다. 액세스 권한이 부여되면 바인딩이 성공하고 WSK 하위 시스템은 STATUS_SUCCESS 상태 반환합니다. 액세스가 거부되면 바인딩이 실패하고 WSK 하위 시스템이 STATUS_ACCESS_DENIED 상태 반환합니다.

액세스 검사 수행되는 이전 테이블에 정의된 경우 두 번째 소켓의 보안 컨텍스트가 첫 번째 소켓의 보안 설명자에 대해 검사됩니다.

  • 소켓의 보안 컨텍스트는 소켓을 만들 때 WskSocket 함수 또는 WskSocketConnect 함수에 전달되는 OwningProcessOwningThread 매개 변수에 의해 결정됩니다. 소켓을 만들 때 특정 프로세스 또는 스레드가 지정되지 않은 경우 소켓을 만든 프로세스의 보안 컨텍스트가 사용됩니다.

  • 소켓의 보안 설명자는 소켓을 만들 때 WskSocket 함수 또는 WskSocketConnect 함수에 전달되는 SecurityDescriptor 매개 변수에 의해 지정됩니다. 특정 보안 설명자가 지정되지 않은 경우 WSK 하위 시스템은 전송 주소 공유를 허용하지 않는 기본 보안 설명자를 사용합니다. SO_WSK_SECURITY 소켓 옵션을 사용하여 소켓을 만든 후 소켓에 보안 설명자를 적용할 수도 있습니다.

두 소켓이 서로 다른 두 개의 특정 로컬 전송 주소에 바인딩된 경우 두 전송 주소를 공유하지 않습니다. 이 경우 두 번째 바인딩 작업이 항상 성공적으로 완료됩니다.