5.8. socket
— Internet communication¶
Sockets are used to communicate over IP networks. TCP and UDP are the most common transport protocols.
Below is a TCP client example that connects to a server and sends data.
uint8_t buf[16];
struct socket_t tcp;
struct inet_addr_t local_addr, remote_addr;
/* Set the local and remote addresses. */
inet_aton("192.168.1.103", &local_addr.ip);
local_addr.port = 6000;
inet_aton("192.168.1.106", &remote_addr.ip);
remote_addr.port = 5000;
/* Initialize the socket and connect to the server. */
socket_open_tcp(&tcp);
socket_bind(&tcp, &local_addr);
socket_connect(&tcp, &remote_addr);
/* Send the data. */
memset(buf, 0, sizeof(buf));
socket_write(&tcp, buf, sizeof(buf));
/* Close the connection. */
socket_close(&tcp);
And below is the same scenario for UDP.
uint8_t buf[16];
struct socket_t udp;
struct socket_addr_t local_addr, remote_addr;
/* Set the local and remote addresses. */
inet_aton("192.168.1.103", &local_addr.ip);
local_addr.port = 6000;
inet_aton("192.168.1.106", &remote_addr.ip);
remote_addr.port = 5000;
/* Initialize the socket and connect to the server. */
socket_open_udp(&udp);
socket_bind(&udp, &local_addr);
socket_connect(&udp, &remote_addr);
/* Send the data. */
memset(buf, 0, sizeof(buf));
socket_send(&udp, buf, sizeof(buf));
/* Close the connection. */
socket_close(&udp);
Source code: src/inet/socket.h, src/inet/socket.c
- Version
- 7.0.0
Functions
-
int
socket_module_init
(void)¶ Initialize the socket module. This function will start the lwIP TCP/IP stack. This function must be called before calling any other function in this module.
The module will only be initialized once even if this function is called multiple times.
- Return
- zero(0) or negative error code.
-
int
socket_open_tcp
(struct socket_t *self_p)¶ Initialize given TCP socket.
- Return
- zero(0) or negative error code.
- Parameters
self_p
-Socket to initialize.
-
int
socket_open_udp
(struct socket_t *self_p)¶ Initialize given UDP socket.
- Return
- zero(0) or negative error code.
- Parameters
self_p
-Socket to initialize.
-
int
socket_open_raw
(struct socket_t *self_p)¶ Initialize given RAW socket.
- Return
- zero(0) or negative error code.
- Parameters
self_p
-Socket to initialize.
-
int
socket_close
(struct socket_t *self_p)¶ Close given socket. No data transfers are allowed on after the socket has been closed.
- Return
- zero(0) or negative error code.
- Parameters
self_p
-Socket to close.
-
int
socket_bind
(struct socket_t *self_p, const struct inet_addr_t *local_addr_p)¶ Bind given local address to given socket.
- Return
- zero(0) or negative error code.
- Parameters
self_p
-Socket.
local_addr_p
-Local address.
-
int
socket_listen
(struct socket_t *self_p, int backlog)¶ Listen for connections from remote clients. Only applicable for TCP sockets.
- Return
- zero(0) or negative error code.
- Parameters
self_p
-Socket to listen on.
backlog
-Unused.
-
int
socket_connect
(struct socket_t *self_p, const struct inet_addr_t *remote_addr_p)¶ Connect to given remote address. Connecting a UDP socket sets the default remote address for outgoing datagrams. For TCP a three-way handshake with the remote peer is initiated.
- Return
- zero(0) or negative error code.
- Parameters
self_p
-Socket.
remote_addr_p
-Remote address.
-
int
socket_connect_by_hostname
(struct socket_t *self_p, const char *hostname_p, uint16_t port)¶ Connect to the remote device with given hostname.
In computer networking, a hostname (archaically nodename) is a label that is assigned to a device connected to a computer network and that is used to identify the device in various forms of electronic communication, such as the World Wide Web.
- Return
- zero(0) or negative error code.
- Parameters
self_p
-Socket.
hostname_p
-The hostname of the remote device to connect to.
port
-Remote device port to connect to.
-
int
socket_accept
(struct socket_t *self_p, struct socket_t *accepted_p, struct inet_addr_t *remote_addr_p)¶ Accept a client connect attempt. Only applicable for TCP sockets that are listening for connections.
- Return
- zero(0) or negative error code.
- Parameters
self_p
-TCP socket.
accepted_p
-New client socket of the accepted client.
remote_addr_p
-Address of the client.
-
ssize_t
socket_sendto
(struct socket_t *self_p, const void *buf_p, size_t size, int flags, const struct inet_addr_t *remote_addr_p)¶ Write data to given socket. Only used by UDP sockets.
- Return
- Number of sent bytes or negative error code.
- Parameters
self_p
-Socket to send data on.
buf_p
-Buffer to send.
size
-Size of buffer to send.
flags
-Unused.
remote_addr_p
-Remote address to send the data to.
-
ssize_t
socket_recvfrom
(struct socket_t *self_p, void *buf_p, size_t size, int flags, struct inet_addr_t *remote_addr_p)¶ Read data from given socket. Only used by UDP sockets.
- Return
- Number of received bytes or negative error code.
- Parameters
self_p
-Socket to receive data on.
buf_p
-Buffer to read into.
size
-Size of buffer to read.
flags
-Unused.
remote_addr_p
-Remote address to receive data from.
-
ssize_t
socket_write
(struct socket_t *self_p, const void *buf_p, size_t size)¶ Write data to given TCP or UDP socket. For UDP sockets,
socket_connect()
must have been called prior to calling this function.- Return
- Number of written bytes or negative error code.
- Parameters
self_p
-Socket.
buf_p
-Buffer to send.
size
-Numer of bytes to send.
-
struct
socket_t
¶