Network Socket Library

## Files

file | UpnpInet.h
| Provides a platform independent way to include TCP/IP types and functions.
file | sock.c
| Implements the sockets functionality.
file | sock.h

## Data Structures

struct | SOCKINFO

## Macros

#define | INVALID_SOCKET (-1)
#define | SOCKET_ERROR (-1)
#define | UpnpCloseSocket close
#define | MSG_NOSIGNAL 0
#define | SD_RECEIVE 0x00
#define | SD_SEND 0x01
#define | SD_BOTH 0x02

## Typedefs

typedef int | SOCKET

## Functions

int | sock_init ( SOCKINFO *info, SOCKET sockfd)
| Assign the passed in socket descriptor to socket descriptor in the SOCKINFO structure. More...
int | sock_init_with_ip ( SOCKINFO *info, SOCKET sockfd, struct sockaddr *foreign_sockaddr)
| Calls the sock_init function and assigns the passed in IP address and port to the IP address and port in the SOCKINFO structure. More...
int | sock_destroy ( SOCKINFO *info, int ShutdownMethod)
| Associates an SSL object with the socket and begins the client-side SSL/TLS handshake. More...
static int | sock_read_write (SOCKINFO *info, char *buffer, size_t bufsize, int *timeoutSecs, int bRead)
| Receives or sends data. Also returns the time taken to receive or send data. More...
int | sock_read ( SOCKINFO *info, char *buffer, size_t bufsize, int *timeoutSecs)
| Reads data on socket in sockinfo. More...
int | sock_write ( SOCKINFO *info, const char *buffer, size_t bufsize, int *timeoutSecs)
| Writes data on the socket in sockinfo. More...
int | sock_make_blocking ( SOCKET sock)
| Make socket blocking. More...
int | sock_make_no_blocking ( SOCKET sock)
| Make socket non-blocking. More...
static UPNP_INLINE int | sock_close (SOCKET sock)
| Closes the socket if it is different from -1. More...

## Detailed Description

## Macro Definition Documentation

## INVALID_SOCKET

#define INVALID_SOCKET (-1)

INVALID_SOCKET is unsigned on win32.

Referenced by get_ssdp_sockets(), and sock_close().

## SOCKET_ERROR

#define SOCKET_ERROR (-1)

select() returns SOCKET_ERROR on win32.

## UpnpCloseSocket

#define UpnpCloseSocket close

Alias to close() to make code more WIN32 tolerant.

Referenced by sock_close().

## Typedef Documentation

## SOCKET

typedef int SOCKET

This typedef makes the code slightly more WIN32 tolerant. On WIN32 systems, SOCKET is unsigned and is not a file descriptor.

## Function Documentation

## sock_close()

static UPNP_INLINE int sock_close | ( | SOCKET | sock | ) |

static

Closes the socket if it is different from -1.

Returns
  -1 if an error occurred or if the socket is -1.

Parameters

  sock | Socket descriptor.

References INVALID_SOCKET, sock_destroy(), sock_init(), sock_init_with_ip(), sock_make_blocking(), sock_make_no_blocking(), sock_read(), sock_write(), and UpnpCloseSocket.

## sock_destroy()

int sock_destroy | ( | SOCKINFO * | info,
|  | int | ShutdownMethod
| ) |  |

Associates an SSL object with the socket and begins the client-side SSL/TLS handshake.

Returns
  Integer:
  - `UPNP_E_SUCCESS`
  - `UPNP_E_SOCKET_ERROR`
  Shutsdown the socket using the ShutdownMethod to indicate whether sends and receives on the socket will be dis-allowed.

After shutting down the socket, closesocket is called to release system resources used by the socket calls.

Returns
  Integer:
  - `UPNP_E_SOCKET_ERROR` on failure.
  - `UPNP_E_SUCCESS` on success.

Parameters

  [in,out] | info | Socket Information Object.
  [in] | ShutdownMethod | How to shutdown the socket. Used by sockets's shutdown().

References UPNP_E_SUCCESS.

Referenced by http_CloseHttpConnection(), and sock_close().

## sock_init()

int sock_init | ( | SOCKINFO * | info,
|  | SOCKET | sockfd
| ) |  |

Assign the passed in socket descriptor to socket descriptor in the SOCKINFO structure.

Returns
  Integer:
  - `UPNP_E_SUCCESS`
  - `UPNP_E_OUTOF_MEMORY`
  - `UPNP_E_SOCKET_ERROR`

Parameters

  [out] | info | Socket Information Object.
  [in] | sockfd | Socket Descriptor.

References SOCKINFO::socket, and UPNP_E_SUCCESS.

Referenced by sock_close(), and sock_init_with_ip().

## sock_init_with_ip()

int sock_init_with_ip | ( | SOCKINFO * | info,
|  | SOCKET | sockfd,
|  | struct sockaddr * | foreign_sockaddr
| ) |  |

Calls the sock_init function and assigns the passed in IP address and port to the IP address and port in the SOCKINFO structure.

Returns
  Integer:
  - `UPNP_E_SUCCESS`
  - `UPNP_E_OUTOF_MEMORY`
  - `UPNP_E_SOCKET_ERROR`

Parameters

  [out] | info | Socket Information Object.
  [in] | sockfd | Socket Descriptor.
  [in] | foreign_sockaddr | Remote socket address.

References SOCKINFO::foreign_sockaddr, sock_init(), SOCKINFO::socket, UPNP_E_SOCKET_ERROR, and UPNP_E_SUCCESS.

Referenced by sock_close().

## sock_make_blocking()

int sock_make_blocking | ( | SOCKET | sock | ) |

Make socket blocking.

Returns
  0 if successful, -1 otherwise.

Referenced by sock_close().

## sock_make_no_blocking()

int sock_make_no_blocking | ( | SOCKET | sock | ) |

Make socket non-blocking.

Returns
  0 if successful, -1 otherwise.

Referenced by sock_close().

## sock_read()

int sock_read | ( | SOCKINFO * | info,
|  | char * | buffer,
|  | size_t | bufsize,
|  | int * | timeoutSecs
| ) |  |

Reads data on socket in sockinfo.

Returns
  Integer:
  - `numBytes` - On Success, no of bytes received.
  - `UPNP_E_TIMEDOUT` - Timeout.
  - `UPNP_E_SOCKET_ERROR` - Error on socket calls.

Parameters

  [in] | info | Socket Information Object.
  [out] | buffer | Buffer to get data to.
  [in] | bufsize | Size of the buffer.
  [in,out] | timeoutSecs | timeout value.

References sock_read_write(), and TRUE.

Referenced by sock_close().

## sock_read_write()

static int sock_read_write | ( | SOCKINFO * | info,
|  | char * | buffer,
|  | size_t | bufsize,
|  | int * | timeoutSecs,
|  | int | bRead
| ) |  |

static

Receives or sends data. Also returns the time taken to receive or send data.

Returns
  - `numBytes` - On Success, no of bytes received or sent or
  - `UPNP_E_TIMEDOUT` - Timeout
  - `UPNP_E_SOCKET_ERROR` - Error on socket calls

Parameters

  [in] | info | Socket Information Object.
  [out] | buffer | Buffer to get data to or send data from.
  [in] | bufsize | Size of the buffer.
  [in] | timeoutSecs | timeout value.
  [in] | bRead | Boolean value specifying read or write option.

References SOCKINFO::socket, TRUE, UPNP_E_SOCKET_ERROR, and UPNP_E_TIMEDOUT.

Referenced by sock_read(), and sock_write().

## sock_write()

int sock_write | ( | SOCKINFO * | info,
|  | const char * | buffer,
|  | size_t | bufsize,
|  | int * | timeoutSecs
| ) |  |

Writes data on the socket in sockinfo.

Returns
  Integer:
  - `numBytes` - On Success, no of bytes received.
  - `UPNP_E_TIMEDOUT` - Timeout.
  - `UPNP_E_SOCKET_ERROR` - Error on socket calls.

Parameters

  [in] | info | Socket Information Object.
  [in] | buffer | Buffer to send data from.
  [in] | bufsize | Size of the buffer.
  [in,out] | timeoutSecs | timeout value.

References sock_read_write().

Referenced by sock_close().