전송 주소 공유
대부분의 경우 Winsock 커널(WSK) 애플리케이션은 다른 소켓에서 이미 사용 중인 로컬 전송 주소에 소켓을 바인딩할 수 없습니다. WSK 애플리케이션은 SO_EXCLUSIVEADDRUSE 및 SO_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 함수에 전달되는 OwningProcess 및 OwningThread 매개 변수에 의해 결정됩니다. 소켓을 만들 때 특정 프로세스 또는 스레드가 지정되지 않은 경우 소켓을 만든 프로세스의 보안 컨텍스트가 사용됩니다.
소켓의 보안 설명자는 소켓을 만들 때 WskSocket 함수 또는 WskSocketConnect 함수에 전달되는 SecurityDescriptor 매개 변수에 의해 지정됩니다. 특정 보안 설명자가 지정되지 않은 경우 WSK 하위 시스템은 전송 주소 공유를 허용하지 않는 기본 보안 설명자를 사용합니다. SO_WSK_SECURITY 소켓 옵션을 사용하여 소켓을 만든 후 소켓에 보안 설명자를 적용할 수도 있습니다.
두 소켓이 서로 다른 두 개의 특정 로컬 전송 주소에 바인딩된 경우 두 전송 주소를 공유하지 않습니다. 이 경우 두 번째 바인딩 작업이 항상 성공적으로 완료됩니다.