Loading...
Searching...
No Matches
socket.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2013-2015 Freie Universität Berlin
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
12
28
29#ifdef CPU_NATIVE
30/* Ignore Linux definitions in native */
31#define _BITS_SOCKADDR_H 1
32#define __SOCKADDR_COMMON(sa_prefix) \
33 sa_family_t sa_prefix##family
34
35#define __SOCKADDR_COMMON_SIZE (sizeof (unsigned short int))
36#endif
37
38#include <stdalign.h>
39#include <stdlib.h>
40#include <sys/types.h>
41#include <sys/uio.h>
42
43#include "architecture.h"
44#include "net/af.h"
45#include "sys/bytes.h"
46
47#ifdef __cplusplus
48extern "C" {
49#endif
50
54#ifndef SOCKET_POOL_SIZE
55#ifdef MODULE_SOCK_TCP
56#define SOCKET_POOL_SIZE (6) /* define enough for accepted sockets */
57#else
58#define SOCKET_POOL_SIZE (4)
59#endif
60#endif
61
66#ifndef SOCKET_TCP_QUEUE_SIZE
67#ifdef MODULE_SOCK_TCP
68#define SOCKET_TCP_QUEUE_SIZE (2)
69#else
70#define SOCKET_TCP_QUEUE_SIZE (0)
71#endif
72#endif
73
81#define SOCKADDR_MAX_DATA_LEN (26)
82
87#define SOCK_DGRAM (1)
88#define SOCK_RAW (2)
89#define SOCK_SEQPACKET (3)
90#define SOCK_STREAM (4)
92
93#define SOL_SOCKET (-1)
94
100#define SO_ACCEPTCONN (0)
101#define SO_BROADCAST (1)
102#define SO_DEBUG (2)
103#define SO_DONTROUTE (3)
104#define SO_ERROR (4)
105#define SO_KEEPALIVE (5)
106#define SO_LINGER (6)
107#define SO_OOBINLINE (7)
108#define SO_RCVBUF (8)
109#define SO_RCVLOWAT (9)
110#define SO_RCVTIMEO (10)
111#define SO_REUSEADDR (11)
112#define SO_SNDBUF (12)
113#define SO_SNDLOWAT (13)
114#define SO_SNDTIMEO (14)
115#define SO_TYPE (15)
117
118typedef unsigned short sa_family_t;
119
126struct sockaddr {
127 alignas(uint32_t) sa_family_t sa_family;
129};
130
142
188int accept(int socket, struct sockaddr *__restrict address,
189 socklen_t *__restrict address_len);
190
215int bind(int socket, const struct sockaddr *address,
216 socklen_t address_len);
217
245int connect(int socket, const struct sockaddr *address, socklen_t address_len);
246
270int getpeername(int socket, struct sockaddr *__restrict address,
271 socklen_t *__restrict address_len);
272
296int getsockname(int socket, struct sockaddr *__restrict address,
297 socklen_t *__restrict address_len);
298
320int listen(int socket, int backlog);
321
356ssize_t recvfrom(int socket, void *__restrict buffer, size_t length, int flags,
357 struct sockaddr *__restrict address,
358 socklen_t *__restrict address_len);
359
383static inline ssize_t recv(int socket, void *buffer, size_t length, int flags)
384{
385 return recvfrom(socket, buffer, length, flags, NULL, NULL);
386}
387
429ssize_t sendto(int socket, const void *buffer, size_t length, int flags,
430 const struct sockaddr *address, socklen_t address_len);
431
453static inline ssize_t send(int socket, const void *buffer, size_t length,
454 int flags)
455{
456 return sendto(socket, buffer, length, flags, NULL, 0);
457}
458
480int socket(int domain, int type, int protocol);
481
486static inline int getsockopt(int socket, int level, int option_name, void *option_value,
487 socklen_t *option_len)
488{
489 (void)socket;
490 (void)level;
491 (void)option_name;
492 (void)option_value;
493 (void)option_len;
494 return -1;
495}
496
497int setsockopt(int socket, int level, int option_name, const void *option_value,
498 socklen_t option_len);
499
501
502#ifdef __cplusplus
503}
504#endif
505
Global UNIX address family definitions.
Platform-independent access to architecture details.
System-internal byte operations.
uint32_t socklen_t
socket address length
Definition bytes.h:33
unsigned short sa_family_t
address family type
Definition socket.h:118
static ssize_t send(int socket, const void *buffer, size_t length, int flags)
Send a message on a socket.
Definition socket.h:453
int bind(int socket, const struct sockaddr *address, socklen_t address_len)
Bind a name to a socket.
static ssize_t recv(int socket, void *buffer, size_t length, int flags)
Receive a message from a connected socket.
Definition socket.h:383
int accept(int socket, struct sockaddr *__restrict address, socklen_t *__restrict address_len)
Accept a new connection on a socket.
int getpeername(int socket, struct sockaddr *__restrict address, socklen_t *__restrict address_len)
Get the name of the peer socket.
int listen(int socket, int backlog)
Listen for socket connections and limit the queue of incoming connections.
int getsockname(int socket, struct sockaddr *__restrict address, socklen_t *__restrict address_len)
Get the socket name.
static int getsockopt(int socket, int level, int option_name, void *option_value, socklen_t *option_len)
Definition socket.h:486
int connect(int socket, const struct sockaddr *address, socklen_t address_len)
Connect a socket.
int socket(int domain, int type, int protocol)
Create an endpoint for communication.
#define SOCKADDR_MAX_DATA_LEN
Maximum data length for a socket address.
Definition socket.h:81
ssize_t recvfrom(int socket, void *__restrict buffer, size_t length, int flags, struct sockaddr *__restrict address, socklen_t *__restrict address_len)
Receive a message from a socket.
ssize_t sendto(int socket, const void *buffer, size_t length, int flags, const struct sockaddr *address, socklen_t address_len)
Send a message on a socket.
Implementation based socket address table.
Definition socket.h:138
sa_family_t ss_family
Address family.
Definition socket.h:139
uint8_t ss_data[SOCKADDR_MAX_DATA_LEN]
Socket address.
Definition socket.h:140
Used to define the socket address.
Definition socket.h:126
char sa_data[SOCKADDR_MAX_DATA_LEN]
Socket address (variable length data)
Definition socket.h:128
sa_family_t sa_family
Address family.
Definition socket.h:127
libc header for scatter/gather I/O