socket_recvfrom

Receives data from a socket whether or not it is connection-oriented

&reftitle.description; ``int``false```socket_recvfrom` `Socket` `socket` `string` `data` `int` `length` `int` `flags` `string` `address` `int` `port`&null;

The `socket_recvfrom` function receives `length` bytes of data in `data` from `address` on port `port` (if the socket is not of type `AF_UNIX`) using `socket`. `socket_recvfrom` can be used to gather data from both connected and unconnected sockets. Additionally, one or more flags can be specified to modify the behaviour of the function.

The `address` and `port` must be passed by reference. If the socket is not connection-oriented, `address` will be set to the internet protocol address of the remote host or the path to the UNIX socket. If the socket is connection-oriented, `address` is &null;. Additionally, the `port` will contain the port of the remote host in the case of an unconnected `AF_INET` or `AF_INET6` socket.

¬e.bin-safe;
&reftitle.parameters;

`socket`

- The `socket` must be a `Socket` instance previously created by socket_create().

`data`

- The data received will be fetched to the variable specified with `data`.

`length`

- Up to `length` bytes will be fetched from remote host.

`flags`

- The value of `flags` can be any combination of the following flags, joined with the binary OR (`|`) operator.

  ## Possible values for `flags`

  Flag | Description
  `MSG_OOB` | Process out-of-band data.
  `MSG_PEEK` | Receive data from the beginning of the receive queue without removing it from the queue.
  `MSG_WAITALL` | Block until at least `length` are received. However, if a signal is caught or the remote host disconnects, the function may return less data.
  `MSG_DONTWAIT` | With this flag set, the function returns even if it would normally have blocked.

`address`

- If the socket is of the type `AF_UNIX` type, `address` is the path to the file. Else, for unconnected sockets, `address` is the IP address of, the remote host, or &null; if the socket is connection-oriented.

`port`

- This argument only applies to `AF_INET` and `AF_INET6` sockets, and specifies the remote port from which the data is received. If the socket is connection-oriented, `port` will be &null;.

&reftitle.returnvalues;

`socket_recvfrom` returns the number of bytes received, or &false; if there was an error. The actual error code can be retrieved by calling `socket_last_error`. This error code may be passed to `socket_strerror` to get a textual explanation of the error.

&reftitle.changelog;

&Version; | &Description;
&sockets.changelog.socket-param;

&reftitle.examples;

### `socket_recvfrom` example

    <?php

    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
    socket_bind($socket, '127.0.0.1', 1223);

    $from = '';
    $port = 0;
    socket_recvfrom($socket, $buf, 12, 0, $from, $port);

    echo "Received $buf from remote address $from and remote port $port" . PHP_EOL;
    ?>

This example will initiate a UDP socket on port 1223 of 127.0.0.1 and print at most 12 characters received from a remote host.

&reftitle.seealso;

- `socket_recv`
- `socket_send`
- `socket_sendto`
- `socket_create`