Unix domain stream socket class. More...
#include <simple_socket/UnixStreamSocket.h>
Public Types | |
| typedef SocketHandle< UnixStreamSocket > | Handle |
| Handle for a new socket returned by accept(). | |
| enum | ShutdownDirection { STOP_SEND = SHUT_WR , STOP_RECEIVE = SHUT_RD , STOP_BOTH = SHUT_RDWR } |
Public Member Functions | |
| UnixStreamSocket () | |
| UnixStreamSocket (Handle &&handle) | |
| Handle | accept () const |
| Handle | timedAccept (int timeout) const |
| void | listen (int backlog=5) |
| Listen for incoming connections. | |
| int | sendAll (const void *buffer, size_t len) |
| Send the complete buffer. | |
| int | receiveAll (void *buffer, size_t len) |
| Receive the complete requested buffer. | |
| void | connect (std::string_view foreignPath) |
| void | bind (std::string_view localPath) |
| std::string | getLocalPath () const |
| std::string | getForeignPath () const |
| int | nativeHandle () noexcept |
| return the native handle of the open socket | |
| int | send (const void *buffer, size_t len) |
| send data through a connected socket | |
| int | receive (void *buffer, size_t len) |
| receive data from a bound socket | |
| int | timedReceive (void *buffer, size_t len, int timeout) |
| receive data from a bound socket, return after the given timespan | |
| void | disconnect () |
| Disconnect and unset any foreign addresses. | |
| void | shutdown (ShutdownDirection type) |
| shutdown the connection in the specified direction | |
| bool | peerDisconnected () const noexcept |
| returns whether a currently associated peer disconnected | |
Protected Attributes | |
| std::string | m_boundPath |
| int | m_socket |
| bool | m_peerDisconnected |
| bool | m_connectionOriented |
Unix domain stream socket class.
Definition at line 10 of file UnixStreamSocket.h.
Handle for a new socket returned by accept().
Definition at line 14 of file UnixStreamSocket.h.
|
inherited |
| UnixStreamSocket::UnixStreamSocket | ( | ) |
Construct a Unix domain stream socket.
| SocketException | thrown if unable to create the socket |
Definition at line 8 of file UnixStreamSocket.cpp.
|
explicit |
Construct a socket from a Handle returned by accept(). Ownership of the descriptor is transferred from the handle. The accepted socket does not own the listening socket's pathname.
| SocketException | thrown if handle is invalid |
Definition at line 12 of file UnixStreamSocket.cpp.
| UnixStreamSocket::Handle UnixStreamSocket::accept | ( | ) | const |
Wait for and accept an incoming connection.
| SocketException | if accept fails |
Definition at line 16 of file UnixStreamSocket.cpp.
|
inherited |
Set the local path to the specified path
| localPath | specifies where the socket should be bound |
| SocketException | thrown if setting local path fails |
Definition at line 33 of file UnixSocket.cpp.
|
inherited |
Establish a socket connection with the given socket
| foreignPath | the path of the remote socket |
| SocketException | thrown if unable to establish connection |
Definition at line 23 of file UnixSocket.cpp.
|
inherited |
Disconnect and unset any foreign addresses.
This will ungracefully abort the connection by sending an RST frame. disconnect() should not be used under normal circumstances, as it will terminate the connection OOB, preventing the other end of the communication from retrieving data that would still be available in the OS buffer.
For normal termination of a connection use shutdown().
| SocketException | thrown if unable to disconnect |
Definition at line 112 of file SimpleSocket.cpp.
|
inherited |
Get the foreign path. Call connect() before using this function.
| SocketException | thrown if fetch fails |
Definition at line 53 of file UnixSocket.cpp.
|
inherited |
Get the local path (after binding the socket)
| SocketException | thrown if fetch fails |
Definition at line 43 of file UnixSocket.cpp.
| void SimpleSocket::listen | ( | int | backlog = 5 | ) |
Listen for incoming connections.
Definition at line 211 of file SimpleSocket.cpp.
|
inlinenoexceptinherited |
return the native handle of the open socket
Definition at line 68 of file SimpleSocket.h.
|
noexceptinherited |
returns whether a currently associated peer disconnected
For stream sockets this is set when the peer closes or resets the connection. Use this function after a call to receive, returned 0 received bytes.
For connected datagram sockets it may also be set when the network reports that the configured peer is unreachable.
The flag is cleared by a successful connect().
Definition at line 132 of file SimpleSocket.cpp.
|
inherited |
receive data from a bound socket
receive() can only be used on a socket that called bind() or connect() before. If you try to use receive() on a not bound socket, SocketException will be thrown.
If using a stream oriented Socket, receive can return a part of a received messge, e.g. if you send 100 bytes, it's possible you will receive 50 bytes two times in a row. However, the order of the sent data will be preserved.
If you are using a datagram oriented sockets, you will only receive whole datagrams. But beware of using a too small buffer. If the receive buffer is too small for the received datagram, the data you didn't read in the receive call will be discared.
If the remote host has closed the connection (on a connection based socket like TCP or SCTP) receive() will return 0. If you are using a connectionless protocol (like UDP) there is no way to determine wheter the connection has been closed by the remote host or not.
| buffer | the buffer the received data will be written to |
| len | length of the provided buffer, receive will not read more than that |
| SocketException | in case an error occured |
Definition at line 70 of file SimpleSocket.cpp.
| int SimpleSocket::receiveAll | ( | void * | buffer, |
| size_t | len ) |
Receive the complete requested buffer.
Definition at line 248 of file SimpleSocket.cpp.
|
inherited |
send data through a connected socket
send() can only be used on a socket that called connect() before. If you try to use send() on a not connected socket, SocketException will be thrown.
If you are using a stream oriented socket (like TCPSocket), the operating system is allowed to send only a part of the packet you told it to send, so send() will return the number of bytes actually sent. It is your responsibility to resend the data not sent by send()
If you are using a datagram oriented socket (like UDPSocket or SCTPSocket) the operating system will only send and receive complete datagrams, but send() will fail if you are trying to send too much data. In that case SocketException will be thrown.
| buffer | data to be send |
| len | length of the data to be sent |
| SocketException | if sending went wrong |
Definition at line 50 of file SimpleSocket.cpp.
| int SimpleSocket::sendAll | ( | const void * | buffer, |
| size_t | len ) |
Send the complete buffer.
Definition at line 231 of file SimpleSocket.cpp.
|
inherited |
shutdown the connection in the specified direction
This will gracefully end a connection by sending a FIN frame. Use this to end a normal communication cycle. To abort a connection see disconnect().
Depending on the specified ShutdownDirection, calls for that direction will stop working. Use this function if you want to have more control than just destroing the socket. It allows you to cut the connection in one direction, or both.
If you use shutdown() on an unconnected socket, the corresponding calls will simply stop working.
| type | the ShutdownDirection that be used |
| SocketException | in case an error occured |
Definition at line 126 of file SimpleSocket.cpp.
| UnixStreamSocket::Handle UnixStreamSocket::timedAccept | ( | int | timeout | ) | const |
Wait up to timeout milliseconds for an incoming connection.
| SocketException | on errors |
Definition at line 22 of file UnixStreamSocket.cpp.
|
inherited |
receive data from a bound socket, return after the given timespan
timedReceive() can only be used on a socket that called bind() or connect before. If you try to use receive() on a not bound socket, SocketException will be thrown.
If using a stream oriented Socket, receive can return a part of a received messge, e.g. if you send 100 bytes, it's possible you will receive 50 bytes two times in a row. However, the order of the sent data will be preserved.
If you are using a datagram oriented sockets, you will only receive whole datagrams. But beware of using a too small buffer. If the receive buffer is too small for the received datagram, the data you didn't read in the receive call will be discared.
If the remote host has closed the connection (on a connection based socket like TCP or SCTP) receive() will return 0. If you are using a connectionless protocol (like UDP) there is no way to determine wheter the connection has been closed by the remote host or not.
| buffer | the buffer the received data will be written to |
| len | length of the provided buffer, receive will not read more than that |
| timeout | the timeout in ms after which receive will give up and return |
| SocketException | in case an error occured |
Definition at line 89 of file SimpleSocket.cpp.
|
protectedinherited |
Definition at line 53 of file UnixSocket.h.
|
protectedinherited |
Definition at line 268 of file SimpleSocket.h.
|
protectedinherited |
Definition at line 267 of file SimpleSocket.h.
|
protectedinherited |
Definition at line 266 of file SimpleSocket.h.