---
name: "socket_recv6"
section: "3"
platform: "linux"
package: "libowfat-dev"
version: "0.32-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/socket_recv6"
---

# socket\_recv6(3)

receive a UDP datagram

## NAME

socket\_recv6 - receive a UDP datagram

## SYNTAX

**#include \<libowfat/socket.h\>**

ssize\_t **socket\_recv6**(int *s*, char\* *buf*, size\_t *len*,\
         char *ip*\[16\], uint16\* *port*, uint32\* *scope\_id*);

## DESCRIPTION

socket\_recv6 receives up to *len* bytes starting at *buf* from a UDP datagram coming in on the socket *s*.  It writes the UDP port to *port* and the IP address to *ip*, and returns the number of bytes actually received (or -1 if anything went wrong).

For link-local addresses, *scope\_id* will become the network interface number, which can be translated into the name of the interface ("eth0") with socket\_getifname.

## RETURN VALUE

socket\_recv6 returns the number of bytes in the datagram if one was received.  If not, it returns -1 and sets errno appropriately.

## EXAMPLE

  \#include \<libowfat/socket.h\>

  int *s*;\
   char *ip*\[16\];\
   uint16 *p*;\
   char buf\[1000\];\
   int len;\
   uint32 scope\_id;

  *s* = socket\_tcp4();\
   socket\_bind6(s,ip,p);\
   len = socket\_recv6(s,buf,sizeof(buf),ip,&p,&scope\_id);

## SEE ALSO

[socket\_recv4(3)](/socket_recv4/3.md), [socket\_getifname(3)](/socket_getifname/3.md)
