### Method

# Gio Socket receive

since: 2.22

#### Declaration

    gssize
    g_socket_receive (
      GSocket* socket,
      gchar* buffer,
      gsize size,
      GCancellable* cancellable,
      GError** error
    )

#### Description

Receive data (up to `size` bytes) from a socket. This is mainly used by connection-oriented sockets; it is identical to `g_socket_receive_from()` with `address` set to `NULL`.

For `G_SOCKET_TYPE_DATAGRAM` and `G_SOCKET_TYPE_SEQPACKET` sockets, `g_socket_receive()` will always read either 0 or 1 complete messages from the socket. If the received message is too large to fit in `buffer`, then the data beyond `size` bytes will be discarded, without any explicit indication that this has occurred.

For `G_SOCKET_TYPE_STREAM` sockets, `g_socket_receive()` can return any number of bytes, up to `size`. If more than `size` bytes have been received, the additional data will be returned in future calls to g_socket_receive().

If the socket is in blocking mode the call will block until there is some data to receive, the connection is closed, or there is an error. If there is no data available and the socket is in non-blocking mode, a `G_IO_ERROR_WOULD_BLOCK` error will be returned. To be notified when data is available, wait for the `G_IO_IN` condition.

On error -1 is returned and `error` is set accordingly.

Available since: 2.22

#### Parameters

`buffer`

  Type: An array of `guint8`

      a buffer to read data into (which should be at least `size` bytes long).

  The argument will be set by the function.
  The length of the array is specified in the `size` argument.
  The data is owned by the instance.

`size`

  Type: `gsize`

  The number of bytes you want to read from the socket.

`cancellable`

  Type: `GCancellable`

  A %GCancellable or `NULL`.

  The argument can be `NULL`.
  The data is owned by the caller of the method.

`error`

  Type: `GError **`

  The return location for a recoverable error.

  The argument can be `NULL`.
  If the return location is not `NULL`, then you must initialize it to a `NULL` `GError*`.
  The argument will be left initialized to `NULL` by the method if there are no errors.
  In case of error, the argument will be set to a newly allocated `GError`; the caller will take ownership of the data, and be responsible for freeing it.

#### Return value

Type: `gssize`

Number of bytes read, or 0 if the connection was closed by the peer, or -1 on error.