friendev EtherDune TCP/IP library
Public Member Functions | List of all members
TCPSocket Class Reference

Implements the TCP protocol. More...

#include <TCPSocket.h>

Inheritance diagram for TCPSocket:
Socket Stateful NetworkService ListItem ENC28J60 HTTPClient HTTPServer TCPListener< SOCKET, MAX_CLIENTS >

Public Member Functions

 TCPSocket ()
 
void connect ()
 Initiates a TCP connection to remoteIP and remotePort. More...
 
void close ()
 Attempts to gracefully close a connection. More...
 
void terminate ()
 Immediately shuts down the socket and makes it available for a new task. More...
 
void listen ()
 Starts listening on the local port indicated by the localPort property. More...
 
void accept ()
 Accepts a connection request that has been received on the port this instance was listening on More...
 
void accept (TCPSocket &listener)
 Accepts a connection request that was sent to another TCPSocket instance. More...
 
void push ()
 Sets the PSH TCP flag and also sends data in the outgoing buffer immediately. More...
 
virtual void onConnect ()
 Fires when the socket connection is established. More...
 
virtual void onConnectRequest ()
 Called when a listening socket receives a connection request. More...
 
virtual void onClose ()
 Fires when the other party closed the incoming end of the connection because it has no more data to send. More...
 
virtual void onReceive (uint16_t len, const byte *data)
 Called for each data packet received More...
 
virtual void onTerminate ()
 Called when the socket is ready to be reused. More...
 
- Public Member Functions inherited from Socket
uint16_t write (uint16_t len, const byte *data)
 In the case of TCP, writes the given data buffer to the socket. More...
 
uint16_t write (const String &s)
 In the case of TCP, writes the given String to the socket, not including the null-terminating character. More...
 
uint16_t write (const __FlashStringHelper *pattern,...)
 Writes out the specified PROGMEM string that may contain the % escape character. More...
 
template<class T >
uint16_t write (const T &message)
 Writes out the binary representation of the parameter to the socket. More...
 
- Public Member Functions inherited from Stateful
uint8_t getState ()
 

Additional Inherited Members

- Public Attributes inherited from Socket
nint16_t remotePort
 remote TCP or UDP port More...
 
nint16_t localPort
 local TCP or UDP port More...
 
IPAddress remoteIP
 remote IP address to connect to (TCP) or send the next packet to (UDP) More...
 
- Protected Member Functions inherited from Socket
void prepareIPPacket ()
 
- Protected Member Functions inherited from NetworkService
 NetworkService ()
 
 ~NetworkService ()
 
virtual void onDNSResolve (uint8_t status, uint16_t identification, const IPAddress &ip)
 Called on each network service every time a DNS response is received. More...
 
- Protected Member Functions inherited from Stateful
void setState (uint8_t newState, uint8_t timeout)
 Changes to a new state More...
 
- Static Protected Member Functions inherited from Socket
static uint16_t calcPseudoHeaderChecksum (uint8_t protocol, uint16_t length)
 Calculates the TCP or UDP pseudo header checksum. More...
 
static uint16_t calcTCPChecksum (bool options, uint16_t dataLength, uint16_t dataChecksum)
 Calculates the TCP checksum. More...
 
static uint16_t calcUDPChecksum (uint16_t dataLength, uint16_t dataChecksum)
 Calculates the UDP checksum. More...
 
static bool verifyUDPTCPChecksum ()
 Verifies if the UDP or TCP checksum of the current packet is correct. More...
 
- Static Protected Member Functions inherited from NetworkService
static bool sendIPPacket (uint16_t length)
 Puts the current in-memory packet in the network More...
 
static void prepareIPPacket (const IPAddress &remoteIP)
 Sets up common IP header values for all outgoing IP packets and calculates the IP header checksum More...
 
static bool sameLAN (IPAddress &dst)
 Determines whether the given IP is in the same subnet as localIP More...
 
static bool begin (uint8_t cspin)
 Initializes EtherDune and the underlying hardware More...
 
static void loop ()
 Gives processing time to EtherDune so that it can check for incoming packets or send queued packets. More...
 
static DNSClientDNS ()
 Obtains access to the DNS service singleton instance. More...
 
- Static Protected Member Functions inherited from ENC28J60
static void writeByte (byte b)
 
static void writeByte (uint16_t dst, byte b)
 
static void writeBuf (uint16_t dst, uint16_t len, const byte *data)
 
static void writeBuf (uint16_t len, const byte *data)
 
static uint16_t hardwareChecksum (uint16_t src, uint16_t len)
 
static uint16_t hardwareChecksumRxOffset (uint16_t offset, uint16_t len)
 
static void moveMem (uint16_t dest, uint16_t src, uint16_t len)
 
static void readBuf (uint16_t src, uint16_t len, byte *data)
 
static void readBuf (uint16_t len, byte *data)
 
static byte readByte (uint16_t src)
 
static void packetSend (uint16_t len)
 
static void packetSend (uint16_t len, const byte *data)
 
static void loadSample ()
 
static void loadAll ()
 
static void release ()
 
static uint8_t begin (uint8_t cspin)
 
static void loop ()
 
static void enableBroadcast ()
 
static bool isLinkUp ()
 Determines whether the network link is ready More...
 
- Protected Attributes inherited from Socket
SharedBuffer buffer
 output buffer for this socket More...
 
- Protected Attributes inherited from Stateful
uint8_t stateTimer
 state timer, in ticks More...
 
uint8_t state
 state code More...
 
- Static Protected Attributes inherited from Socket
static uint8_t srcPort_L_count = 0
 self-incrementing counter for local ports. More...
 
- Static Protected Attributes inherited from NetworkService
static EthBuffer packet
 in-memory packet buffer currently being processed. More...
 
static ARPService ARP
 ARP singleton instance. More...
 
static MACAddress localMAC
 Ethernet MAC address. More...
 
static IPAddress localIP = { 0, 0, 0, 0 }
 IP address of this application. More...
 
static IPAddress gatewayIP = { 0, 0, 0, 0 }
 IP address of the gateway in this network. More...
 
static IPAddress netmask = { 0, 0, 0, 0 }
 Subnet mask. More...
 
static IPAddress dnsIP = { 0, 0, 0, 0 }
 IP address of the DNS server to use. More...
 

Detailed Description

Implements the TCP protocol.

This class implements the TCP protocol as a NetworkService.

To consume this class, create a derived class of TCPSocket to be able to override the different virtual functions that notify of events related to the socket.

The socket write functions are inherited from Socket. Check out Socket::write() for more information.

See TCPClientDemo_DaytimeClient.ino, ChatServer.ino and EchoServer.ino for examples

Definition at line 45 of file TCPSocket.h.

Constructor & Destructor Documentation

TCPSocket::TCPSocket ( )

Definition at line 56 of file TCPSocket.cpp.

Member Function Documentation

void TCPSocket::accept ( )

Accepts a connection request that has been received on the port this instance was listening on

Definition at line 101 of file TCPSocket.cpp.

void TCPSocket::accept ( TCPSocket listener)

Accepts a connection request that was sent to another TCPSocket instance.

This allows to "spawn" a socket dedicated to fulfill a client request while keeping the listening socket available to detect other connection requests.

Parameters
listenerThe TCPSocket that received the connection request

Definition at line 120 of file TCPSocket.cpp.

void TCPSocket::close ( )

Attempts to gracefully close a connection.

Definition at line 194 of file TCPSocket.cpp.

void TCPSocket::connect ( )

Initiates a TCP connection to remoteIP and remotePort.

Definition at line 71 of file TCPSocket.cpp.

void TCPSocket::listen ( )

Starts listening on the local port indicated by the localPort property.

Set this property prior to calling listen()

Definition at line 91 of file TCPSocket.cpp.

void TCPSocket::onClose ( )
virtual

Fires when the other party closed the incoming end of the connection because it has no more data to send.

Note that the outgoing end of the connection must also be closed by calling close(). A socket is not fully closed until both directions are closed. Usually you call close() as a response to the onClose() event, but this will depend on the protocol being implemented.

Definition at line 31 of file TCPSocket.cpp.

void TCPSocket::onConnect ( )
virtual

Fires when the socket connection is established.

If this was a client socket, onConnect() fires when SYN-ACK is received.

If this was a listening socket, onConnect fires when the ACK to the SYN-ACK is received, that is, when the connection is fully established.

Definition at line 39 of file TCPSocket.cpp.

void TCPSocket::onConnectRequest ( )
virtual

Called when a listening socket receives a connection request.

To accept the connection request, call accept()

Reimplemented in TCPListener< SOCKET, MAX_CLIENTS >.

Definition at line 44 of file TCPSocket.cpp.

void TCPSocket::onReceive ( uint16_t  len,
const byte *  data 
)
virtual

Called for each data packet received

Parameters
lenLength of the data received
dataPointer to data received

Definition at line 50 of file TCPSocket.cpp.

void TCPSocket::onTerminate ( )
virtual

Called when the socket is ready to be reused.

Reimplemented in TCPListener< SOCKET, MAX_CLIENTS >.

Definition at line 54 of file TCPSocket.cpp.

void TCPSocket::push ( )

Sets the PSH TCP flag and also sends data in the outgoing buffer immediately.

Normally, socket writes have a maximum lag of 1 tick (by default 200ms) to try piggyback ACKs and also attempt to send more data than just one write. Using push() you can have EhterFlow send data without waiting the 200ms.

Definition at line 498 of file TCPSocket.cpp.

void TCPSocket::terminate ( )

Immediately shuts down the socket and makes it available for a new task.

Call this method to ensure a full cleanup before reusing a socket instance.

Note that using this method will not gracefully terminate a connection. If a connection was established, no message will be sent to the other party.

Definition at line 183 of file TCPSocket.cpp.


The documentation for this class was generated from the following files: