---
name: "ldap_result"
section: "3"
platform: "linux"
package: "libldap"
version: "2.7.2-2"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/ldap_result"
---

# ldap\_result(3)

Wait for the result of an LDAP operation

## NAME

ldap\_result - Wait for the result of an LDAP operation

## LIBRARY

OpenLDAP LDAP (libldap, -lldap)

## SYNOPSIS

```
#include <ldap.h>
```

**int ldap\_result( LDAP \*ld, int msgid, int all,**\
 	**struct timeval \*timeout, LDAPMessage \*\*result );**

**int ldap\_msgfree( LDAPMessage \*msg );**

**int ldap\_msgtype( LDAPMessage \*msg );**

**int ldap\_msgid( LDAPMessage \*msg );**

## DESCRIPTION

**The** **ldap\_result()** **routine is used to wait for and return the result of** **an operation previously initiated by one of the LDAP asynchronous** **operation routines (e.g.,** [**ldap\_search\_ext**(3)](/ldap_search_ext/3.md), [**ldap\_modify\_ext**(3)](/ldap_modify_ext/3.md), **etc.).  Those routines all return -1 in case of error, and an** **invocation identifier upon successful initiation of the operation. The** **invocation identifier is picked by the library and is guaranteed to be** **unique across the LDAP session.  It can be used to request the result** **of a specific operation from** **ldap\_result()** **through the** *msgid* **parameter.**

**The** **ldap\_result()** **routine will block or not, depending upon the setting** **of the** *timeout* **parameter.** **If timeout is not a NULL pointer,  it  specifies  a  maximum** **interval  to wait for the selection to complete.  If timeout** **is a NULL  pointer, the LDAP\_OPT\_TIMEOUT value set by** [**ldap\_set\_option**(3)](/ldap_set_option/3.md) **is used. With the default setting,** **the  select  blocks  indefinitely.   To** **effect  a  poll,  the  timeout argument should be a non-NULL** **pointer, pointing to a zero-valued timeval structure.** **To obtain the behavior of the default setting, bypassing any value set by**  [**ldap\_set\_option**(3)](/ldap_set_option/3.md), **set to -1 the** *tv\_sec* **field of the** *timeout* **parameter.** **See** [**select**(2)](/select/2.md) **for further details.**

**If the result of a specific operation is required,** *msgid* **should** **be set to the invocation identifier returned when the operation was** **initiated, otherwise LDAP\_RES\_ANY or LDAP\_RES\_UNSOLICITED should be** **supplied to wait for any or unsolicited response.**

**The** *all* **parameter, if non-zero, causes** **ldap\_result()** **to return all responses with msgid, otherwise only the** **next response is returned.  This is commonly used to obtain all** **the responses of a search operation.**

**A search response is made up of zero or** **more search entries, zero or more search references, and zero or** **more extended partial responses followed by a search result.  If** *all* **is set to 0, search entries will be returned one at a** **time as they come in, via separate calls to** **ldap\_result()**. **If it's set to 1, the search** **response will only be returned in its entirety, i.e., after all entries,** **all references, all extended partial responses, and the final search** **result have been received.**

## RETURN VALUE

**Upon success, the type of the result received is returned and the** *result* **parameter will contain the result of the operation;** **otherwise, the** *result* **parameter is undefined.  This** **result should be passed to the LDAP parsing routines,** [**ldap\_first\_message**(3)](/ldap_first_message/3.md) **and friends, for interpretation.**

**The possible result types returned are:**

```
	LDAP_RES_BIND (0x61)
	LDAP_RES_SEARCH_ENTRY (0x64)
	LDAP_RES_SEARCH_REFERENCE (0x73)
	LDAP_RES_SEARCH_RESULT (0x65)
	LDAP_RES_MODIFY (0x67)
	LDAP_RES_ADD (0x69)
	LDAP_RES_DELETE (0x6b)
	LDAP_RES_MODDN (0x6d)
	LDAP_RES_COMPARE (0x6f)
	LDAP_RES_EXTENDED (0x78)
	LDAP_RES_INTERMEDIATE (0x79)
```

**The** **ldap\_msgfree()** **routine is used to free the memory allocated for** **result(s) by** **ldap\_result()** **or** [**ldap\_search\_ext\_s**(3)](/ldap_search_ext_s/3.md) **and friends.** **It takes a pointer to the result or result chain to be freed and returns** **the type of the last message in the chain.** **If the parameter is NULL, the function does nothing and returns zero.**

**The** **ldap\_msgtype()** **routine returns the type of a message.**

**The** **ldap\_msgid()** **routine returns the message id of a message.**

## ERRORS

**ldap\_result()** **returns -1 if something bad happens, and zero if the** **timeout specified was exceeded.** **ldap\_msgtype()** **and** **ldap\_msgid()** **return -1 on error.**

## BUGS

**When there are multiple messages in** **\*\*result** **including a result message (common with searches), the return value of** **ldap\_result** **will vary depending on various factors. Some implementations have started** **depending on this behaviour and as such it is unlikely to be be fixed in the** **2.x release series. To get the actual message type you're interested, use** **ldap\_first\_message** **or** **ldap\_parse\_result** **as needed.**

## SEE ALSO

[**ldap**(3)](/ldap/3.md), [**ldap\_first\_message**(3)](/ldap_first_message/3.md), [**select**(2)](/select/2.md)

## ACKNOWLEDGEMENTS

**OpenLDAP Software** **is developed and maintained by The OpenLDAP Project \<http://www.openldap.org/\>.** **OpenLDAP Software** **is derived from the University of Michigan LDAP 3.3 Release.**
