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 | isReady (int index) |
Don't accept work from a client unless it is accepting work back, i.e. More... | |
int | Socket_continueWrites (SOCKET *sock, mutex_type mutex) |
Continue any outstanding socket writes. More... | |
int | Socket_setnonblocking (SOCKET sock) |
Set a socket non-blocking, OS independently. More... | |
int | Socket_error (char *aString, SOCKET sock) |
Gets the specific error corresponding to SOCKET_ERROR. More... | |
int | Socket_addSocket (SOCKET newSd) |
Add a socket to the list of socket to check with select. More... | |
int | Socket_writev (SOCKET 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 (SOCKET socket) |
Close a socket without removing it from the select list. More... | |
int | Socket_continueWrite (SOCKET socket) |
Continue an outstanding write for a particular socket. More... | |
char * | Socket_getaddrname (struct sockaddr *sa, SOCKET sock) |
Convert a numeric address to character string. More... | |
int | Socket_abortWrite (SOCKET 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. | |
static int | cmpfds (const void *p1, const void *p2) |
static int | cmpsockfds (const void *p1, const void *p2) |
SOCKET | Socket_getReadySocket (int more_work, int timeout, mutex_type mutex, int *rc) |
Returns the next socket ready for communications as indicated by select. More... | |
int | Socket_getch (SOCKET socket, char *c) |
Reads one byte from a socket. More... | |
char * | Socket_getdata (SOCKET 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 (SOCKET socket) |
Indicate whether any data is pending outbound for a socket. More... | |
int | Socket_putdatas (SOCKET 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 (SOCKET socket) |
Add a socket to the pending write list, so that it is checked for writing in select. More... | |
void | Socket_clearPendingWrite (SOCKET socket) |
Clear a socket from the pending write list - if one was added with Socket_addPendingWrite. More... | |
int | Socket_close (SOCKET socket) |
Close a socket and remove it from the select list. More... | |
int | Socket_new (const char *addr, size_t addr_len, int port, SOCKET *sock) |
Create a new socket and TCP connect to an address/port. More... | |
void | Socket_setWriteContinueCallback (Socket_writeContinue *mywritecontinue) |
void | Socket_setWriteCompleteCallback (Socket_writeComplete *mywritecomplete) |
void | Socket_setWriteAvailableCallback (Socket_writeAvailable *mywriteavailable) |
char * | Socket_getpeer (SOCKET 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 Socket_writeContinue * | writecontinue = NULL |
static Socket_writeComplete * | writecomplete = NULL |
static Socket_writeAvailable * | writeAvailable = NULL |
Socket related functions.
Some other related functions are in the SocketBuffer module
int isReady | ( | int | index | ) |
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.
index | the socket index to check |
int Socket_abortWrite | ( | SOCKET | socket | ) |
Continue an outstanding write for a particular socket.
socket | that socket |
void Socket_addPendingWrite | ( | SOCKET | 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 | ( | SOCKET | newSd | ) |
Add a socket to the list of socket to check with select.
newSd | the new socket to add |
void Socket_clearPendingWrite | ( | SOCKET | socket | ) |
Clear a socket from the pending write list - if one was added with Socket_addPendingWrite.
socket | the socket to remove |
int Socket_close | ( | SOCKET | socket | ) |
Close a socket and remove it from the select list.
socket | the socket to close |
int Socket_close_only | ( | SOCKET | socket | ) |
Close a socket without removing it from the select list.
socket | the socket to close |
int Socket_continueWrite | ( | SOCKET | socket | ) |
Continue an outstanding write for a particular socket.
socket | that socket |
int Socket_continueWrites | ( | SOCKET * | sock, |
mutex_type | mutex | ||
) |
Continue any outstanding socket writes.
sock | in case of a socket error contains the affected socket |
int Socket_error | ( | char * | aString, |
SOCKET | 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, |
SOCKET | 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 | ( | SOCKET | socket, |
char * | c | ||
) |
Reads one byte from a socket.
socket | the socket to read from |
c | the character read, returned |
char* Socket_getdata | ( | SOCKET | 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 | ( | SOCKET | sock | ) |
Get information about the other end connected to a socket.
sock | the socket to inquire on |
SOCKET Socket_getReadySocket | ( | int | more_work, |
int | timeout, | ||
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 |
timeout | the timeout to be used in ms |
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, | ||
SOCKET * | 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 | ( | SOCKET | socket | ) |
Indicate whether any data is pending outbound for a socket.
int Socket_putdatas | ( | SOCKET | 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 | ( | SOCKET | sock | ) |
Set a socket non-blocking, OS independently.
sock | the socket to set non-blocking |
int Socket_writev | ( | SOCKET | 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 |