![]() |
MQTT C Client Libraries Internals
|
Socket related functions. More...
#include "Socket.h"
#include "Log.h"
#include "SocketBuffer.h"
#include "Messages.h"
#include "StackTrace.h"
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <ctype.h>
#include "Heap.h"
Macros | |
#define | ADDRLEN INET6_ADDRSTRLEN+1 |
#define | PORTLEN 10 |
Functions | |
int | Socket_setnonblocking (int sock) |
Set a socket non-blocking, OS independently. More... | |
int | Socket_error (char *aString, int sock) |
Gets the specific error corresponding to SOCKET_ERROR. More... | |
int | Socket_addSocket (int newSd) |
Add a socket to the list of socket to check with select. More... | |
int | isReady (int socket, fd_set *read_set, fd_set *write_set) |
Don't accept work from a client unless it is accepting work back, i.e. More... | |
int | Socket_writev (int socket, iobuf *iovecs, int count, unsigned long *bytes) |
Attempts to write a series of iovec buffers to a socket in one system call so that they are sent as one packet. More... | |
int | Socket_close_only (int socket) |
Close a socket without removing it from the select list. More... | |
int | Socket_continueWrite (int socket) |
Continue an outstanding write for a particular socket. More... | |
int | Socket_continueWrites (fd_set *pwset, int *sock) |
Continue any outstanding writes for a socket set. More... | |
char * | Socket_getaddrname (struct sockaddr *sa, int sock) |
Convert a numeric address to character string. More... | |
int | Socket_abortWrite (int socket) |
Continue an outstanding write for a particular socket. More... | |
void | Socket_outInitialize (void) |
Initialize the socket module. | |
void | Socket_outTerminate (void) |
Terminate the socket module. | |
int | Socket_getReadySocket (int more_work, struct timeval *tp, mutex_type mutex, int *rc) |
Returns the next socket ready for communications as indicated by select. More... | |
int | Socket_getch (int socket, char *c) |
Reads one byte from a socket. More... | |
char * | Socket_getdata (int socket, size_t bytes, size_t *actual_len, int *rc) |
Attempts to read a number of bytes from a socket, non-blocking. More... | |
int | Socket_noPendingWrites (int socket) |
Indicate whether any data is pending outbound for a socket. More... | |
int | Socket_putdatas (int socket, char *buf0, size_t buf0len, PacketBuffers bufs) |
Attempts to write a series of buffers to a socket in one system call so that they are sent as one packet. More... | |
void | Socket_addPendingWrite (int socket) |
Add a socket to the pending write list, so that it is checked for writing in select. More... | |
void | Socket_clearPendingWrite (int socket) |
Clear a socket from the pending write list - if one was added with Socket_addPendingWrite. More... | |
void | Socket_close (int socket) |
Close a socket and remove it from the select list. More... | |
int | Socket_new (const char *addr, size_t addr_len, int port, int *sock) |
Create a new socket and TCP connect to an address/port. More... | |
void | Socket_setWriteCompleteCallback (Socket_writeComplete *mywritecomplete) |
char * | Socket_getpeer (int sock) |
Get information about the other end connected to a socket. More... | |
Variables | |
Sockets | mod_s |
Structure to hold all socket data for this module. | |
static fd_set | wset |
static Socket_writeComplete * | writecomplete = NULL |
Socket related functions.
Some other related functions are in the SocketBuffer module
int isReady | ( | int | socket, |
fd_set * | read_set, | ||
fd_set * | write_set | ||
) |
Don't accept work from a client unless it is accepting work back, i.e.
its socket is writeable this seems like a reasonable form of flow control, and practically, seems to work.
socket | the socket to check |
read_set | the socket read set (see select doc) |
write_set | the socket write set (see select doc) |
int Socket_abortWrite | ( | int | socket | ) |
Continue an outstanding write for a particular socket.
socket | that socket |
void Socket_addPendingWrite | ( | int | socket | ) |
Add a socket to the pending write list, so that it is checked for writing in select.
This is used in connect processing when the TCP connect is incomplete, as we need to check the socket for both ready to read and write states.
socket | the socket to add |
int Socket_addSocket | ( | int | newSd | ) |
Add a socket to the list of socket to check with select.
newSd | the new socket to add |
void Socket_clearPendingWrite | ( | int | socket | ) |
Clear a socket from the pending write list - if one was added with Socket_addPendingWrite.
socket | the socket to remove |
void Socket_close | ( | int | socket | ) |
Close a socket and remove it from the select list.
socket | the socket to close |
int Socket_close_only | ( | int | socket | ) |
Close a socket without removing it from the select list.
socket | the socket to close |
int Socket_continueWrite | ( | int | socket | ) |
Continue an outstanding write for a particular socket.
socket | that socket |
int Socket_continueWrites | ( | fd_set * | pwset, |
int * | sock | ||
) |
Continue any outstanding writes for a socket set.
pwset | the set of sockets |
sock | in case of a socket error contains the affected socket |
int Socket_error | ( | char * | aString, |
int | sock | ||
) |
Gets the specific error corresponding to SOCKET_ERROR.
aString | the function that was being used when the error occurred |
sock | the socket on which the error occurred |
char * Socket_getaddrname | ( | struct sockaddr * | sa, |
int | sock | ||
) |
Convert a numeric address to character string.
sa | socket numerical address |
sock | socket |
maximum length of the address string
maximum length of the port string
int Socket_getch | ( | int | socket, |
char * | c | ||
) |
Reads one byte from a socket.
socket | the socket to read from |
c | the character read, returned |
char* Socket_getdata | ( | int | socket, |
size_t | bytes, | ||
size_t * | actual_len, | ||
int * | rc | ||
) |
Attempts to read a number of bytes from a socket, non-blocking.
If a previous read did not finish, then retrieve that data.
socket | the socket to read from |
bytes | the number of bytes to read |
actual_len | the actual number of bytes read |
char* Socket_getpeer | ( | int | sock | ) |
Get information about the other end connected to a socket.
sock | the socket to inquire on |
int Socket_getReadySocket | ( | int | more_work, |
struct timeval * | tp, | ||
mutex_type | mutex, | ||
int * | rc | ||
) |
Returns the next socket ready for communications as indicated by select.
more_work | flag to indicate more work is waiting, and thus a timeout value of 0 should be used for the select |
tp | the timeout to be used for the select, unless overridden |
rc | a value other than 0 indicates an error of the returned socket |
int Socket_new | ( | const char * | addr, |
size_t | addr_len, | ||
int | port, | ||
int * | sock | ||
) |
Create a new socket and TCP connect to an address/port.
addr | the address string |
port | the TCP port |
sock | returns the new socket |
timeout | the timeout in milliseconds |
int Socket_noPendingWrites | ( | int | socket | ) |
Indicate whether any data is pending outbound for a socket.
int Socket_putdatas | ( | int | socket, |
char * | buf0, | ||
size_t | buf0len, | ||
PacketBuffers | bufs | ||
) |
Attempts to write a series of buffers to a socket in one system call so that they are sent as one packet.
socket | the socket to write to |
buf0 | the first buffer |
buf0len | the length of data in the first buffer |
count | number of buffers |
buffers | an array of buffers to write |
buflens | an array of corresponding buffer lengths |
int Socket_setnonblocking | ( | int | sock | ) |
Set a socket non-blocking, OS independently.
sock | the socket to set non-blocking |
int Socket_writev | ( | int | socket, |
iobuf * | iovecs, | ||
int | count, | ||
unsigned long * | bytes | ||
) |
Attempts to write a series of iovec buffers to a socket in one system call so that they are sent as one packet.
socket | the socket to write to |
iovecs | an array of buffers to write |
count | number of buffers in iovecs |
bytes | number of bytes actually written returned |