---
name: "libressl-SSL_accept"
section: "3"
platform: "linux"
package: "libressl"
version: "4.4.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/libressl-SSL_accept"
---

# libressl-SSL\_accept(3)

wait for a TLS/SSL client to initiate a TLS/SSL handshake

## NAME

**SSL\_accept** – wait for a TLS/SSL client to initiate a TLS/SSL handshake

## SYNOPSIS

SSL Library (libssl, -lssl) libcrypto

**#include \<openssl/ssl.h\>**

*int*\

**SSL\_accept**(*SSL \*ssl*);

## DESCRIPTION

**SSL\_accept**() waits for a TLS/SSL client to initiate the TLS/SSL handshake. The communication channel must already have been set and assigned to the *ssl* object by setting an underlying *BIO*.

The behaviour of **SSL\_accept**() depends on the underlying *BIO*.

If the underlying *BIO* is *blocking*, **SSL\_accept**() will only return once the handshake has been finished or an error occurred.

If the underlying *BIO* is *non-blocking*, **SSL\_accept**() will also return when the underlying *BIO* could not satisfy the needs of **SSL\_accept**() to continue the handshake, indicating the problem by the return value −1. In this case a call to SSL\_get\_error(3) with the return value of **SSL\_accept**() will yield SSL\_ERROR\_WANT\_READ or SSL\_ERROR\_WANT\_WRITE. The calling process then must repeat the call after taking appropriate action to satisfy the needs of **SSL\_accept**(). The action depends on the underlying BIO. When using a non-blocking socket, nothing is to be done, but [select(2)](/select/2.md) can be used to check for the required condition. When using a buffering *BIO*, like a *BIO* pair, data must be written into or retrieved out of the *BIO* before being able to continue.

## RETURN VALUES

The following return values can occur:

- 0

  The TLS/SSL handshake was not successful but was shut down controlled and by the specifications of the TLS/SSL protocol. Call SSL\_get\_error(3) with the return value *ret* to find out the reason.

- 1

  The TLS/SSL handshake was successfully completed, and a TLS/SSL connection has been established.

- \<0

  The TLS/SSL handshake was not successful because a fatal error occurred either at the protocol level or a connection failure occurred. The shutdown was not clean. It can also occur of action is need to continue the operation for non-blocking*BIO* s. Call SSL\_get\_error(3) with the return value *ret* to find out the reason.

## SEE ALSO

BIO\_new(3), [ssl(3)](/ssl/3.md), SSL\_connect(3), SSL\_CTX\_new(3), SSL\_do\_handshake(3), SSL\_get\_error(3), SSL\_set\_connect\_state(3), SSL\_shutdown(3)

## HISTORY

**SSL\_accept**() appeared in SSLeay 0.4 or earlier and has been available since OpenBSD 2.4.
