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 헤더 파일에 정의되며 다음 옵션의 조합일 수 있습니다.
플래그 | 의미 |
---|---|
|
첫 번째 수준이 아닌 심층 쿼리. |
|
컨테이너만 반환합니다. |
|
컨테이너를 반환하지 마세요. |
|
가능하면 는 거리 순서로 결과를 반환합니다. 거리 측정값은 공급자별입니다. |
|
이름을 lpszServiceInstanceName으로 검색합니다. |
|
형식을 lpServiceClassId로 검색합니다. |
|
버전을 lpVersion으로 검색합니다. |
|
주석을 lpszComment로 검색합니다. |
|
주소를 lpcsaBuffer로 검색합니다. |
|
개인 데이터를 lpBlob으로 검색합니다. |
|
사용 가능한 모든 별칭 정보는 WSALookupServiceNext에 대한 연속 호출에서 반환되며 반환되는 각 별칭에는 RESULT_IS_ALIAS 플래그가 설정됩니다. |
|
요청에 사용되는 쿼리 문자열을 검색합니다. |
|
모든 LUP_RETURN_* 값을 검색하는 플래그 집합입니다. |
|
WSALookupServiceNext에서 dwControlFlags 매개 변수의 값으로 사용됩니다. 이 플래그를 설정하면 공급자가 지정된 버퍼에 비해 너무 큰 마지막 결과 집합을 삭제하고 다음 결과 집합으로 이동하도록 지시합니다. |
|
공급자가 정보를 캐싱한 경우 는 캐시를 무시하고 네임스페이스 자체를 쿼리합니다. |
|
이는 주요 응답이 CSADDR_INFO 구조의 원격 또는 로컬 부분에 있는지 여부를 나타냅니다. 다른 부분은 두 경우 모두 사용할 수 있어야 합니다. |
[in, out] lpdwBufferLength
입력에서 lpqsResults가 가리키는 버퍼에 포함된 바이트 수입니다. 출력에서 함수가 실패하고 오류가 WSAEFAULT인 경우 lpqsResults 가 레코드를 검색하기 위해 전달할 최소 바이트 수를 포함합니다.
[out] lpqsResults
반환 시 WSAQUERYSET 구조체에 하나의 결과 집합을 포함하는 메모리 블록에 대한 포인터입니다.
반환 값
작업이 성공한 경우 반환 값은 0입니다. 그렇지 않으면 SOCKET_ERROR 값이 반환되고 WSAGetLastError를 호출하여 특정 오류 번호를 검색할 수 있습니다.
오류 코드 | 의미 |
---|---|
이 호출이 계속 처리되는 동안 WSALookupServiceEnd 에 대한 호출이 수행되었습니다. 통화가 취소되었습니다. lpqsResults 버퍼의 데이터는 정의되지 않습니다. Windows 소켓 버전 2에서는 WSAECANCELLED (10103) 및 WSA_E_CANCELLED (10111)에 대해 충돌하는 오류 코드가 정의됩니다. 오류 코드 WSAECANCELLED는 이후 버전에서 제거되며 WSA_E_CANCELLED 유지됩니다. 그러나 Windows 소켓 버전 2의 경우 애플리케이션은 둘 중 하나를 사용하는 네임스페이스 공급자와의 가능한 가장 광범위한 호환성을 위해 WSAECANCELLED 및 WSA_E_CANCELLED 모두에 대해 검사 합니다. | |
더 이상 사용할 수 있는 데이터가 없습니다. Windows 소켓 버전 2에서는 WSAENOMORE (10102) 및 WSA_E_NO_MORE (10110)에 대해 충돌하는 오류 코드가 정의됩니다. 오류 코드 WSAENOMORE는 이후 버전에서 제거되며 WSA_E_NO_MORE 유지됩니다. 그러나 Windows 소켓 버전 2의 경우 애플리케이션은 WSAENOMORE 및 WSA_E_NO_MORE 둘 다에 대해 검사 두 공급자 중 하나를 사용하는 이름 공간 공급자와의 가능한 가장 광범위한 호환성을 위해 검사 합니다. | |
lpqsResults 버퍼가 너무 작아서 WSAQUERYSET 집합을 포함할 수 없습니다. | |
하나 이상의 필수 매개 변수가 잘못되었거나 누락되었습니다. | |
지정한 조회 핸들이 잘못되었습니다. | |
WS2_32.DLL 초기화되지 않았습니다. 애플리케이션은 Windows 소켓 함수를 호출하기 전에 먼저 WSAStartup 을 호출해야 합니다. | |
이름이 데이터베이스에서 발견되었지만 지정된 제한 사항과 일치하는 데이터가 없습니다. | |
작업을 수행할 메모리가 부족했습니다. |
설명
이 함수에 지정된 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의 멤버 중 일부가 있어야 합니다. 최소한 WSAQUERYSET의 dwSize 멤버를 버퍼의 새 크기로 설정해야 합니다.
쿼리 결과
다음 표에서는 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.1 및 Windows 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 |