LPNSPLOOKUPSERVICENEXT 콜백 함수(ws2spi.h)

NSPLookupServiceNext 함수는 요청된 서비스 정보를 검색하기 위해 NSPLookupServiceBegin에 대한 이전 호출에서 핸들을 가져온 후 호출됩니다.

공급자는 lpqsResults 버퍼에 WSAQUERYSET 구조를 전달합니다. 클라이언트는 모든 WSAQUERYSET이 반환되었음을 나타내는 WSA_E_NOMORE 반환될 때까지 이 함수를 호출해야 합니다.

구문

LPNSPLOOKUPSERVICENEXT Lpnsplookupservicenext;

INT Lpnsplookupservicenext(
  [in]      HANDLE hLookup,
  [in]      DWORD dwControlFlags,
  [in, out] LPDWORD lpdwBufferLength,
  [out]     LPWSAQUERYSETW lpqsResults
)
{...}

매개 변수

[in] hLookup

WSALookupServiceBegin에 대한 이전 호출에서 반환된 핸들입니다.

[in] dwControlFlags

다음 작업을 제어하는 데 사용되는 플래그입니다. 현재 LUP_FLUSHPREVIOUS 너무 큰 결과 집합을 처리하는 수단으로 정의됩니다. 애플리케이션이 충분히 큰 버퍼를 제공할 수 없는 경우 LUP_FLUSHPREVIOUS 설정하면 공급자가 너무 큰 마지막 결과 집합을 삭제하고 이 호출의 다음 집합으로 이동하도록 지시합니다.

[in, out] lpdwBufferLength

lpqsResults가 가리키는 버퍼에 포함된 입력의 크기(바이트)입니다. 출력에서 함수가 실패하고 오류가 WSAEFAULT인 경우 lpqsResults 가 레코드를 검색하기 위해 전달할 최소 크기(바이트)를 포함합니다.

[out] lpqsResults

반환 시 WSAQUERYSET 구조체에 하나의 결과 집합을 포함할 메모리 블록에 대한 포인터입니다.

반환 값

함수는 루틴이 성공하면 NO_ERROR (0)를 반환해야 합니다. 루틴이 실패하고 WSASetLastError를 사용하여 적절한 오류 코드를 설정해야 하는 경우 SOCKET_ERROR(–1)를 반환해야 합니다.

오류 코드 의미
WSA_E_CANCELLED
이 호출이 계속 처리되는 동안 NSPLookupServiceEnd 에 대한 호출이 수행되었습니다. 호출이 취소되었습니다. lpqsResults 버퍼의 데이터가 정의되지 않았습니다.

Windows 소켓 2에서는 WSAECANCELLED (10103) 및 WSA_E_CANCELLED (10111)에 대해 충돌하는 오류 코드가 정의됩니다. 오류 코드 WSAECANCELLED 는 이후 버전에서 제거되며 WSA_E_CANCELLED 유지됩니다. 네임스페이스 공급자는 가능한 가장 광범위한 애플리케이션과의 호환성을 유지하기 위해 WSA_E_CANCELLED 오류 코드를 사용해야 합니다.

WSA_E_NO_MORE
더 이상 사용할 수 있는 데이터가 없습니다.

Windows 소켓 2에서는 WSAENOMORE (10102) 및 WSA_E_NO_MORE (10110)에 대해 충돌하는 오류 코드가 정의됩니다. 오류 코드 WSAENOMORE 는 이후 버전에서 제거되며 WSA_E_NO_MORE 유지됩니다. 네임스페이스 공급자는 가능한 가장 광범위한 애플리케이션과의 호환성을 유지하기 위해 WSA_E_NO_MORE 오류 코드를 사용해야 합니다.

WSA_INVALID_HANDLE
지정한 조회 핸들이 잘못되었습니다.
WSA_NOT_ENOUGH_MEMORY
이 작업을 수행하는 데 사용할 수 있는 메모리가 부족합니다.
WSAEFAULT
lpqsResults 버퍼가 너무 작아서 WSAQUERYSET 집합을 포함할 수 없습니다.
WSAEINVAL
이 공급자에 대해 하나 이상의 매개 변수가 잘못되었거나 누락되었습니다.
WSAEOPNOTSUPP
이 작업은 지원되지 않습니다. 네임스페이스 공급자가 이 함수를 구현하지 않으면 이 오류가 반환됩니다.
WSANO_DATA
이름이 데이터베이스에서 발견되었지만 지정된 제한 사항과 일치하는 데이터가 없습니다.
WSASERVICE_NOT_FOUND
서비스를 알 수 없습니다. 지정된 네임스페이스에서 서비스를 찾을 수 없습니다.

설명

이 함수에 지정된 dwControlFlagsNSPLookupServiceBegin 시 지정된 dwControlFlags는 조합 목적으로 "제한 사항"으로 처리됩니다. 제한 사항은 NSPLookupServiceBegin 시간에 있는 제한 사항과 NSPLookupServiceNext 시간의 제한 사항 간에 결합됩니다. 따라서 NSPLookupServiceNext 의 플래그는 NSPLookupServiceBegin에서 요청된 데이터보다 더 많거나 적은 플래그를 지정하는 오류는 아니지만 반환되는 데이터의 양을 늘릴 수 없습니다. 지정된 NSPLookupServiceNext 에 지정된 플래그는 해당 호출에만 적용됩니다.

dwControlFlagsLUP_FLUSHPREVIOUSLUP_RES_SERVICE 결합된 제한 규칙의 예외입니다("제한" 플래그 대신 동작 플래그이므로). NSPLookupServiceNext에서 두 플래그 중 하나를 사용하는 경우 NSPLookupServiceBegin에서 동일한 플래그의 설정에 관계없이 정의된 효과가 있습니다.

예를 들어 NSPLookupServiceBegin에서 LUP_RETURN_VERSION 지정된 경우 서비스 공급자는 버전을 포함한 레코드를 검색합니다. NSPLookupServiceNext에서 LUP_RETURN_VERSION 지정하지 않은 경우, 반환된 정보에는 버전을 사용할 수 있었음에도 불구하고 해당 버전이 포함되지 않습니다. 오류가 생성되지 않습니다.

또한 예를 들어 NSPLookupServiceBegin에서 LUP_RETURN_BLOB 지정되지 않았지만 NSPLookupServiceNext에 지정된 경우 반환된 정보에는 프라이빗 데이터가 포함되지 않습니다. 오류가 생성되지 않습니다.

쿼리 결과

다음 표에서는 WSAQUERYSET 을 나열하고 WSAQUERYSET 구조에서 쿼리 결과가 표시되는 방법을 설명합니다. 자세한 내용은 쿼리 관련 데이터 구조를 참조하세요.
WSAQUERYSET 멤버 이름 결과 해석
**dwSize** sizeof(WSAQUERYSET)로 설정됩니다. 이는 버전 관리 메커니즘으로 사용됩니다.
**dwOutputFlags** **RESULT_IS_ALIAS** 플래그는 별칭 결과임을 나타냅니다.
**lpszServiceInstanceName** 서비스 이름을 포함하는 문자열을 참조합니다.
**lpServiceClassId** 서비스 클래스에 해당하는 GUID입니다.
**lpVersion** 특정 서비스 인스턴스의 버전 번호를 참조합니다.
**lpszComment** 선택 사항입니다. 서비스 인스턴스에서 제공하는 주석 문자열입니다.
**dwNameSpace** 서비스 인스턴스가 발견된 네임스페이스입니다.
**lpNSProviderId** 이 쿼리 결과를 제공한 특정 네임스페이스 공급자를 식별합니다.
**lpszContext** 서비스가 있는 계층 구조 네임스페이스의 컨텍스트 지점을 지정합니다.
**dwNumberOfProtocols** 결과에 대해 정의되지 않았습니다.
**lpafpProtocols** 결과에 대해 정의되지 않은 모든 필요한 프로토콜 정보는 CSADDR_INFO 구조에 있습니다.
**lpszQueryString** dwControlFlags에 **LUP_RETURN_QUERY_STRING**가 포함된 경우 이 멤버는 원래 쿼리에 지정된 **lpszServiceInstanceName**의 분할되지 않은 나머지를 반환합니다. 예를 들어 호스트 이름 및 해당 호스트 내의 파일 경로를 지정하는 계층적 이름으로 서비스를 식별하는 네임스페이스에서 반환된 주소는 호스트 주소일 수 있고 나머지는 파일 경로일 수 있습니다. **lpszServiceInstanceName**이 완전히 구문 분석되고 **LUP_RETURN_QUERY_STRING**가 사용되는 경우 이 멤버는 null이거나 길이가 0인 문자열을 가리킵니다.
**dwNumberOfCsAddrs** CSADDR_INFO 구조체 배열의 요소 수를 나타냅니다.
**lpcsaBuffer** 각 요소 내에 하나의 완전한 전송 주소가 포함된 CSADDR_INFO 구조의 배열에 대한 포인터입니다.
**lpBlob** 선택 사항입니다. 공급자별 엔터티에 대한 포인터입니다.

요구 사항

   
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 ws2spi.h

추가 정보

CSADDR_INFO

NSPLookupServiceBegin

NSPLookupServiceEnd

NSP_ROUTINE

WSAQUERYSET

WSASetLastError