WSALookupServiceNextA 함수(winsock2.h)

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

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

구문

INT WSAAPI WSALookupServiceNextA(
  [in]      HANDLE         hLookup,
  [in]      DWORD          dwControlFlags,
  [in, out] LPDWORD        lpdwBufferLength,
  [out]     LPWSAQUERYSETA lpqsResults
);

매개 변수

[in] hLookup

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

[in] dwControlFlags

작업을 제어하는 플래그 집합입니다. dwControlFlags 매개 변수에서 WSALookupServiceBegin 함수에 전달된 값은 가능한 조건을 결정합니다. dwControlFlags 매개 변수에서 WSALookupServiceNext 함수에 전달된 모든 값은 서비스 조회 조건을 추가로 제한합니다.

현재 LUP_FLUSHPREVIOUS 너무 큰 결과 집합에 대처하기 위한 수단으로 정의되어 있습니다. 애플리케이션이 충분히 큰 버퍼를 제공하지 않거나 제공할 수 없는 경우 LUP_FLUSHPREVIOUS 설정하면 공급자가 너무 큰 마지막 결과 집합을 삭제하고 이 호출에 대한 다음 집합으로 이동하도록 지시합니다.

dwControlFlags 매개 변수에 지원되는 값은 Winsock2.h 헤더 파일에 정의되며 다음 옵션의 조합일 수 있습니다.

플래그 의미
LUP_DEEP
0x0001
첫 번째 수준이 아닌 심층 쿼리.
LUP_CONTAINERS
0x0002
컨테이너만 반환합니다.
LUP_NOCONTAINERS
0x0004
컨테이너를 반환하지 마세요.
LUP_NEAREST
0x0008
가능하면 는 거리 순서로 결과를 반환합니다. 거리 측정값은 공급자별입니다.
LUP_RETURN_NAME
0x0010
이름을 lpszServiceInstanceName으로 검색합니다.
LUP_RETURN_TYPE
0x0020
형식을 lpServiceClassId로 검색합니다.
LUP_RETURN_VERSION
0x0040
버전을 lpVersion으로 검색합니다.
LUP_RETURN_COMMENT
0x0080
주석을 lpszComment로 검색합니다.
LUP_RETURN_ADDR
0x0100
주소를 lpcsaBuffer로 검색합니다.
LUP_RETURN_BLOB
0x0200
개인 데이터를 lpBlob으로 검색합니다.
LUP_RETURN_ALIASES
0x0400
사용 가능한 모든 별칭 정보는 WSALookupServiceNext에 대한 연속 호출에서 반환되며 반환되는 각 별칭에는 RESULT_IS_ALIAS 플래그가 설정됩니다.
LUP_RETURN_QUERY_STRING
0x0800
요청에 사용되는 쿼리 문자열을 검색합니다.
LUP_RETURN_ALL
0x0FF0
모든 LUP_RETURN_* 값을 검색하는 플래그 집합입니다.
LUP_FLUSHPREVIOUS
0x1000
WSALookupServiceNext에서 dwControlFlags 매개 변수의 값으로 사용됩니다. 이 플래그를 설정하면 공급자가 지정된 버퍼에 비해 너무 큰 마지막 결과 집합을 삭제하고 다음 결과 집합으로 이동하도록 지시합니다.
LUP_FLUSHCACHE
0x2000
공급자가 정보를 캐싱한 경우 는 캐시를 무시하고 네임스페이스 자체를 쿼리합니다.
LUP_RES_SERVICE
0x8000
이는 주요 응답이 CSADDR_INFO 구조의 원격 또는 로컬 부분에 있는지 여부를 나타냅니다. 다른 부분은 두 경우 모두 사용할 수 있어야 합니다.

[in, out] lpdwBufferLength

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

[out] lpqsResults

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

반환 값

작업이 성공한 경우 반환 값은 0입니다. 그렇지 않으면 SOCKET_ERROR 값이 반환되고 WSAGetLastError를 호출하여 특정 오류 번호를 검색할 수 있습니다.

오류 코드 의미
WSA_E_CANCELLED
이 호출이 계속 처리되는 동안 WSALookupServiceEnd 에 대한 호출이 수행되었습니다. 통화가 취소되었습니다. lpqsResults 버퍼의 데이터는 정의되지 않습니다. Windows 소켓 버전 2에서는 WSAECANCELLED (10103) 및 WSA_E_CANCELLED (10111)에 대해 충돌하는 오류 코드가 정의됩니다. 오류 코드 WSAECANCELLED는 이후 버전에서 제거되며 WSA_E_CANCELLED 유지됩니다. 그러나 Windows 소켓 버전 2의 경우 애플리케이션은 둘 중 하나를 사용하는 네임스페이스 공급자와의 가능한 가장 광범위한 호환성을 위해 WSAECANCELLED 및 WSA_E_CANCELLED 모두에 대해 검사 합니다.
WSA_E_NO_MORE
더 이상 사용할 수 있는 데이터가 없습니다. Windows 소켓 버전 2에서는 WSAENOMORE (10102) 및 WSA_E_NO_MORE (10110)에 대해 충돌하는 오류 코드가 정의됩니다. 오류 코드 WSAENOMORE는 이후 버전에서 제거되며 WSA_E_NO_MORE 유지됩니다. 그러나 Windows 소켓 버전 2의 경우 애플리케이션은 WSAENOMORE 및 WSA_E_NO_MORE 둘 다에 대해 검사 두 공급자 중 하나를 사용하는 이름 공간 공급자와의 가능한 가장 광범위한 호환성을 위해 검사 합니다.
WSAEFAULT
lpqsResults 버퍼가 너무 작아서 WSAQUERYSET 집합을 포함할 수 없습니다.
WSAEINVAL
하나 이상의 필수 매개 변수가 잘못되었거나 누락되었습니다.
WSA_INVALID_HANDLE
지정한 조회 핸들이 잘못되었습니다.
WSANOTINITIALISED
WS2_32.DLL 초기화되지 않았습니다. 애플리케이션은 Windows 소켓 함수를 호출하기 전에 먼저 WSAStartup 을 호출해야 합니다.
WSANO_DATA
이름이 데이터베이스에서 발견되었지만 지정된 제한 사항과 일치하는 데이터가 없습니다.
WSA_NOT_ENOUGH_MEMORY
작업을 수행할 메모리가 부족했습니다.

설명

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

dwControlFlags LUP_FLUSHPREVIOUS 및 LUP_RES_SERVICE 결합된 제한 규칙의 예외입니다(제한 플래그 대신 동작 플래그이기 때문). 이러한 플래그 중 하나가 WSALookupServiceNext 에서 사용되는 경우 WSALookupServiceBegin에서 동일한 플래그의 설정에 관계없이 정의된 효과가 있습니다.

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

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

WSAEFAULT 오류로 인해 WSALookupServiceNext 함수가 실패하면 lpqsResults 매개 변수가 가리키는 버퍼가 너무 작아 쿼리 결과를 포함할 수 없음을 나타냅니다. WSAQUERYSET에 대한 새 버퍼는 lpdwBufferLength 매개 변수가 가리키는 값으로 지정된 크기로 제공되어야 합니다. WSAQUERYSET에 대한 이 새 버퍼에는 WSALookupServiceNext 함수를 다시 호출하기 전에 지정된 WSAQUERYSET의 멤버 중 일부가 있어야 합니다. 최소한 WSAQUERYSETdwSize 멤버를 버퍼의 새 크기로 설정해야 합니다.

쿼리 결과

다음 표에서는 WSAQUERYSET 구조에서 쿼리 결과를 나타내는 방법을 설명합니다.
WSAQUERYSET 멤버 결과 해석
dwSize sizeof( WSAQUERYSET)로 설정됩니다. 이는 버전 관리 메커니즘으로 사용됩니다.
dwOutputFlags RESULT_IS_ALIAS 플래그는 별칭 결과임을 나타냅니다.
lpszServiceInstanceName 참조된 문자열에는 서비스 이름이 포함됩니다.
lpServiceClassId 서비스 클래스에 해당하는 GUID입니다.
lpVersion 특정 서비스 instance 버전 번호를 참조합니다.
lpszComment 서비스 instance 지정한 선택적 주석 문자열입니다.
dwNameSpace 서비스가 instance 네임스페이스를 찾았습니다.
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 Phone 8:WSALookupServiceNextW 함수는 Windows Phone 8 이상에서 Windows Phone 스토어 앱에 대해 지원됩니다.

Windows 8.1Windows Server 2012 R2: WSALookupServiceNextW 함수는 Windows 8.1, Windows Server 2012 R2 이상의 Windows 스토어 앱에서 지원됩니다.

참고

winsock2.h 헤더는 WSALookupServiceNext를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

   
지원되는 최소 클라이언트 Windows 8.1, Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 winsock2.h
라이브러리 Ws2_32.lib
DLL Ws2_32.dll

추가 정보

Bluetooth 및 WSALookupServiceNext

WSALookupServiceBegin

WSALookupServiceEnd

WSAQUERYSET

Winsock 함수

Winsock 참조