12#ifndef CMSIS_PLUS_POSIX_IO_SOCKET_H_
13#define CMSIS_PLUS_POSIX_IO_SOCKET_H_
17#if defined(__cplusplus)
21#if defined(OS_USE_OS_APP_CONFIG_H)
22#include <cmsis-plus/os-app-config.h>
33#pragma GCC diagnostic push
35#pragma clang diagnostic ignored "-Wc++98-compat"
56#pragma GCC diagnostic push
58#elif defined(__GNUC__)
59#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
60#pragma GCC diagnostic ignored "-Wsuggest-final-types"
120 getsockopt (
int level,
int option_name,
void* option_value,
127 recv (
void* buffer,
size_t length,
int flags);
130 recvfrom (
void* buffer,
size_t length,
int flags,
134 recvmsg ( msghdr* message,
int flags);
137 send (
const void* buffer,
size_t length,
int flags);
140 sendmsg (
const msghdr* message,
int flags);
143 sendto (
const void* message,
size_t length,
int flags,
147 setsockopt (
int level,
int option_name,
const void* option_value,
159#pragma GCC diagnostic push
160#if defined(__clang__)
161#elif defined(__GNUC__)
162#pragma GCC diagnostic ignored "-Wredundant-tags"
168#pragma GCC diagnostic pop
203#pragma GCC diagnostic pop
291 do_recv (
void* buffer,
size_t length,
int flags)
304 do_send (
const void* buffer,
size_t length,
int flags)
312 do_sendto (
const void* message,
size_t length,
int flags,
336 template <
typename T>
409 template <
typename T,
typename L>
460 close (
void)
override;
482 getsockopt (
int level,
int option_name,
void* option_value,
486 listen (
int backlog)
override;
489 recv (
void* buffer,
size_t length,
int flags)
override;
492 recvfrom (
void* buffer,
size_t length,
int flags,
497 recvmsg ( msghdr* message,
int flags)
override;
500 send (
const void* buffer,
size_t length,
int flags)
override;
503 sendmsg (
const msghdr* message,
int flags)
override;
506 sendto (
const void* message,
size_t length,
int flags,
511 setsockopt (
int level,
int option_name,
const void* option_value,
571 template <
typename T>
573 :
socket{ impl_instance_, ns }
575#if defined(OS_TRACE_POSIX_IO_SOCKET)
576 trace::printf (
"socket_implementable::%s()=@%p\n", __func__,
this);
580 template <
typename T>
583#if defined(OS_TRACE_POSIX_IO_SOCKET)
584 trace::printf (
"socket_implementable::%s() @%p\n", __func__,
this);
588 template <
typename T>
597 template <
typename T,
typename L>
600 :
socket{ impl_instance_, ns },
603#if defined(OS_TRACE_POSIX_IO_SOCKET)
604 trace::printf (
"socket_lockable::%s()=@%p\n", __func__,
this);
608 template <
typename T,
typename L>
611#if defined(OS_TRACE_POSIX_IO_SOCKET)
612 trace::printf (
"socket_lockable::%s() @%p\n", __func__,
this);
618 template <
typename T,
typename L>
622 std::lock_guard<L> lock{ locker_ };
627 template <
typename T,
typename L>
632 std::lock_guard<L> lock{ locker_ };
637 template <
typename T,
typename L>
642 std::lock_guard<L> lock{ locker_ };
647 template <
typename T,
typename L>
652 std::lock_guard<L> lock{ locker_ };
657 template <
typename T,
typename L>
662 std::lock_guard<L> lock{ locker_ };
667 template <
typename T,
typename L>
672 std::lock_guard<L> lock{ locker_ };
677 template <
typename T,
typename L>
683 std::lock_guard<L> lock{ locker_ };
688 template <
typename T,
typename L>
692 std::lock_guard<L> lock{ locker_ };
697 template <
typename T,
typename L>
701 std::lock_guard<L> lock{ locker_ };
706 template <
typename T,
typename L>
712 std::lock_guard<L> lock{ locker_ };
717 template <
typename T,
typename L>
721 std::lock_guard<L> lock{ locker_ };
726 template <
typename T,
typename L>
730 std::lock_guard<L> lock{ locker_ };
735 template <
typename T,
typename L>
740 std::lock_guard<L> lock{ locker_ };
745 template <
typename T,
typename L>
752 std::lock_guard<L> lock{ locker_ };
754 return socket::sendto (message, length, flags, dest_addr, dest_len);
757 template <
typename T,
typename L>
760 const void* option_value,
763 std::lock_guard<L> lock{ locker_ };
768 template <
typename T,
typename L>
772 std::lock_guard<L> lock{ locker_ };
777 template <
typename T,
typename L>
781 std::lock_guard<L> lock{ locker_ };
786 template <
typename T,
typename L>
797#pragma GCC diagnostic pop
virtual int do_bind(const sockaddr *address, socklen_t address_len)=0
virtual int do_getpeername(sockaddr *address, socklen_t *address_len)=0
virtual int do_getsockopt(int level, int option_name, void *option_value, socklen_t *option_len)=0
virtual socket * do_accept(sockaddr *address, socklen_t *address_len)=0
virtual int do_listen(int backlog)=0
virtual ~socket_impl() override
virtual int do_setsockopt(int level, int option_name, const void *option_value, socklen_t option_len)=0
virtual ssize_t do_recvfrom(void *buffer, size_t length, int flags, sockaddr *address, socklen_t *address_len)=0
virtual ssize_t do_sendmsg(const msghdr *message, int flags)=0
virtual ssize_t do_recv(void *buffer, size_t length, int flags)=0
virtual ssize_t do_send(const void *buffer, size_t length, int flags)=0
virtual ssize_t do_sendto(const void *message, size_t length, int flags, const sockaddr *dest_addr, socklen_t dest_len)=0
virtual int do_getsockname(sockaddr *address, socklen_t *address_len)=0
virtual ssize_t do_recvmsg(msghdr *message, int flags)=0
virtual int do_connect(const sockaddr *address, socklen_t address_len)=0
virtual int do_sockatmark(void)=0
virtual int do_shutdown(int how)=0
virtual ~socket_implementable()
value_type & impl(void) const
socket_implementable(class net_stack &ns)
virtual int sockatmark(void) override
virtual ssize_t send(const void *buffer, size_t length, int flags) override
virtual ssize_t recv(void *buffer, size_t length, int flags) override
virtual ssize_t sendmsg(const msghdr *message, int flags) override
virtual int setsockopt(int level, int option_name, const void *option_value, socklen_t option_len) override
virtual int listen(int backlog) override
virtual int close(void) override
virtual int shutdown(int how) override
virtual ssize_t sendto(const void *message, size_t length, int flags, const sockaddr *dest_addr, socklen_t dest_len) override
value_type & impl(void) const
virtual ~socket_lockable()
virtual int getsockname(sockaddr *address, socklen_t *address_len) override
virtual ssize_t recvmsg(msghdr *message, int flags) override
virtual class socket * accept(sockaddr *address, socklen_t *address_len) override
socket_lockable(class net_stack &ns, lockable_type &locker)
virtual int bind(const sockaddr *address, socklen_t address_len) override
virtual ssize_t recvfrom(void *buffer, size_t length, int flags, sockaddr *address, socklen_t *address_len) override
virtual int connect(const sockaddr *address, socklen_t address_len) override
virtual int getpeername(sockaddr *address, socklen_t *address_len) override
virtual int getsockopt(int level, int option_name, void *option_value, socklen_t *option_len) override
virtual int setsockopt(int level, int option_name, const void *option_value, socklen_t option_len)
virtual int sockatmark(void)
virtual int listen(int backlog)
virtual int getsockname(sockaddr *address, socklen_t *address_len)
virtual socket * accept(sockaddr *address, socklen_t *address_len)
virtual int bind(const sockaddr *address, socklen_t address_len)
virtual ssize_t recv(void *buffer, size_t length, int flags)
virtual ssize_t sendto(const void *message, size_t length, int flags, const sockaddr *dest_addr, socklen_t dest_len)
virtual ssize_t send(const void *buffer, size_t length, int flags)
virtual int getpeername(sockaddr *address, socklen_t *address_len)
virtual ssize_t sendmsg(const msghdr *message, int flags)
virtual int connect(const sockaddr *address, socklen_t address_len)
virtual ssize_t recvfrom(void *buffer, size_t length, int flags, sockaddr *address, socklen_t *address_len)
virtual int shutdown(int how)
virtual ~socket() override
virtual ssize_t recvmsg(msghdr *message, int flags)
virtual int getsockopt(int level, int option_name, void *option_value, socklen_t *option_len)
socket_impl & impl(void) const
class net_stack * net_stack(void)
The core of a double linked list, pointers to next, previous.
int printf(const char *format,...)
Write a formatted string to the trace device.
int socket(int domain, int type, int protocol)