Socket
Description
A connected socket: either returned by ListenerAccept (server side) or by SocketConnect (client side). peer is the remote endpoint.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
Socket.c:6:
#include <Misra/Std/Allocator/Default.h>
#include <Misra/Std/Log.h>
#include <Misra/Sys/Socket.h>
#include <arpa/inet.h>- In
Socket.c:19:
bool test_socket_loopback_round_trip(void) {
Listener listener;
Socket client = {0};
Socket server = {0};- In
Socket.c:20:
Listener listener;
Socket client = {0};
Socket server = {0};
SocketAddr bind_addr;- In
Socket.c:111:
int main(void) {
WriteFmt("[INFO] Starting Socket tests\n\n");
TestFunction tests[] = {- In
Socket.c:118:
};
return run_test_suite(tests, sizeof(tests) / sizeof(tests[0]), NULL, 0, "Socket");
}- In
Socket.c:12:
#define _POSIX_C_SOURCE 200809L
#include <Misra/Sys/Socket.h>
#ifdef _WIN32- In
Socket.c:15:
#ifdef _WIN32
# error "Sys/Socket on Windows is not implemented yet; set sys_socket=false"
#endif- In
Socket.c:270:
}
bool ListenerAccept(Listener *self, Socket *out_conn) {
if (!self || !out_conn) {
LOG_ERROR("ListenerAccept: NULL argument");- In
Socket.c:307:
// ---------------------------------------------------------------------------
bool SocketConnect(Socket *out, SocketKind kind, const SocketAddr *target) {
if (!out || !target) {
LOG_ERROR("SocketConnect: NULL argument");- In
Socket.c:340:
}
i64 SocketRecv(Socket *self, void *buf, size n) {
if (!self || !buf) {
LOG_ERROR("SocketRecv: NULL argument");- In
Socket.c:353:
}
i64 SocketSend(Socket *self, const void *buf, size n) {
if (!self || !buf) {
LOG_ERROR("SocketSend: NULL argument");- In
Socket.c:366:
}
void SocketClose(Socket *self) {
if (!self) {
return;- In
Sys.h:31:
#if MISRA_HAVE_SYS_SOCKET
# include <Misra/Sys/Socket.h>
#endif- In
Socket.h:69:
SocketKind kind;
SocketAddr peer;
} Socket;
typedef enum SocketPollFlags {- In
Socket.h:158:
/// TAGS: Socket, Listener, Accept
///
bool ListenerAccept(Listener *self, Socket *out_conn);
///
- In
Socket.h:185:
/// TAGS: Socket, Connect
///
bool SocketConnect(Socket *out, SocketKind kind, const SocketAddr *target);
///
- In
Socket.h:199:
/// TAGS: Socket, Recv
///
i64 SocketRecv(Socket *self, void *buf, size n);
///
- In
Socket.h:214:
/// TAGS: Socket, Send
///
i64 SocketSend(Socket *self, const void *buf, size n);
///
- In
Socket.h:225:
/// TAGS: Socket, Close
///
void SocketClose(Socket *self);
// --- Options ----------------------------------------------------------------
- In
Beam.c:21:
#include <Misra.h>
#include <Misra/Parsers/Http.h>
#include <Misra/Sys/Socket.h>
#include <signal.h>- In
Beam.c:108:
// directions close. `first_chunk` (if non-NULL) is sent toward `b`
// before the poll loop runs, so the initial client read isn't lost.
static void proxy_pump(Socket *a, Socket *b, const char *first_chunk, size first_len) {
if (first_chunk && first_len > 0) {
if (SocketSend(b, first_chunk, first_len) < 0) {- In
Beam.c:153:
}
static void handle_connection(Allocator *alloc, Socket *client, const SocketAddr *upstream_addr) {
Str peer_str = SocketAddrFormat(&client->peer, alloc);- In
Beam.c:156:
Str peer_str = SocketAddrFormat(&client->peer, alloc);
Socket upstream;
if (!SocketConnect(&upstream, SOCKET_KIND_TCP, upstream_addr)) {
LOG_ERROR("failed to dial upstream for client [{}]", peer_str);- In
Beam.c:242:
}
Socket client;
if (!ListenerAccept(&listener, &client)) {
continue;
Last updated on