# PR_AcceptRead

Accepts a new connection and receives a block of data.

## Syntax

```{code}
#include <prio.h>

PRInt32 PR_AcceptRead(
  PRFileDesc *listenSock,
  PRFileDesc **acceptedSock,
  PRNetAddr **peerAddr,
  void *buf,
  PRInt32 amount,
  PRIntervalTime timeout);
```

### Parameters

The function has the following parameters:

`listenSock`

: A pointer to a {ref}`PRFileDesc` object representing a socket descriptor
  that has been called with the {ref}`PR_Listen` function, also known as
  the rendezvous socket.

`acceptedSock`

: A pointer to a pointer to a {ref}`PRFileDesc` object. On return,
  `*acceptedSock` points to the {ref}`PRFileDesc` object for the newly
  connected socket. This parameter is valid only if the function return
  does not indicate failure.

`peerAddr`

: A pointer a pointer to a {ref}`PRNetAddr` object. On return,
  `peerAddr` points to the address of the remote socket. The
  {ref}`PRNetAddr` object that `peerAddr` points to will be in the
  buffer pointed to by `buf`. This parameter is valid only if the
  function return does not indicate failure.

`buf`

: A pointer to a buffer to hold data sent by the peer and the peer's
  address. This buffer must be large enough to receive `amount` bytes
  of data and two {ref}`PRNetAddr` structures (thus allowing the runtime
  to align the addresses as needed).

`amount`

: The number of bytes of data to receive. Does not include the size of
  the {ref}`PRNetAddr` structures. If 0, no data will be read from the
  peer.

`timeout`

: The timeout interval only applies to the read portion of the
  operation. {ref}`PR_AcceptRead` blocks indefinitely until the connection
  is accepted; the read will time out after the timeout interval
  elapses.

### Returns

- A positive number indicates the number of bytes read from the peer.
- The value -1 indicates a failure. The reason for the failure can be
  obtained by calling {ref}`PR_GetError`.

## Description

{ref}`PR_AcceptRead` accepts a new connection and retrieves the newly
created socket's descriptor and the connecting peer's address. Also, as
its name suggests, {ref}`PR_AcceptRead` receives the first block of data
sent by the peer.
