Main Page | Modules | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals | Related Pages | Examples

TCP
[Base Protocols]

Collaboration diagram for TCP:


Detailed Description

RFC 793 Transmission Control Protocol.

TCP provides reliable, in-sequence delivery of a full-duplex stream of octets. It is used by applications which need a reliable, connection-oriented data transport.

Applications should call the TCP Socket API when using this protocol.

Todo:
Use an indirect call for NutTcpInput(). Right now, the whole TCP code is linked to any application, even if only UDP is used.


Defines

#define min(a, b)   ((a>b)?b:a)
#define max(a, b)   ((a>b)?a:b)

Functions

void NutTcpInput (NETBUF *nb)
 Process incoming TCP segments from IP layer.
int NutTcpStatePassiveOpenEvent (TCPSOCKET *sock)
 Initiated by the application.
int NutTcpStateActiveOpenEvent (TCPSOCKET *sock)
 Initiated by the application.
int NutTcpStateCloseEvent (TCPSOCKET *sock)
 Socket close by application.
int NutTcpStateWindowEvent (TCPSOCKET *sock)
 Initiated by the application.
int NutTcpStateRetranTimeout (TCPSOCKET *sock)
 Retransmit a segment after ACK timeout.
void NutTcpSm (void *arg)
 TCP state machine thread.
void NutTcpStateMachine (NETBUF *nb)
 Process incoming TCP segments.
int NutTcpInitStateMachine (void)
 Start TCP state machine.
int NutTcpAbortSocket (TCPSOCKET *sock, u_short last_error)
 Closes socket with error.
int IsInLimits (u_long x, u_long low, u_long high)
 Sequence number comparisons.
void NutTcpCalcRtt (TCPSOCKET *sock)

Variables

HANDLE tcp_in_rdy
NETBUF *volatile tcp_in_nbq


Function Documentation

void NutTcpInput NETBUF nb  ) 
 

Process incoming TCP segments from IP layer.

Warning:
The caller must take care not to pass broadcast or multicast segments.
Note:
This routine is called by the IP layer on incoming TCP segments. Applications typically do not call this function.

int NutTcpStatePassiveOpenEvent TCPSOCKET sock  ) 
 

Initiated by the application.

Parameters:
sock Socket descriptor. This pointer must have been retrieved by calling NutTcpCreateSocket().
Returns:
0 if granted, error code otherwise.

int NutTcpStateActiveOpenEvent TCPSOCKET sock  ) 
 

Initiated by the application.

The caller must make sure, that the socket is in closed state.

Parameters:
sock Socket descriptor. This pointer must have been retrieved by calling NutTcpCreateSocket().
Returns:
0 if granted, -1 otherwise.

int NutTcpStateCloseEvent TCPSOCKET sock  ) 
 

Socket close by application.

If socket is in state SYN_RECEIVED or ESTABLISHED, it is changed to FINWAIT1.

No further data sending is accepted. Receiving is still allowed.

Parameters:
sock Socket descriptor. This pointer must have been retrieved by calling NutTcpCreateSocket().

int NutTcpStateWindowEvent TCPSOCKET sock  ) 
 

Initiated by the application.

Parameters:
sock Socket descriptor. This pointer must have been retrieved by calling NutTcpCreateSocket().

int NutTcpStateRetranTimeout TCPSOCKET sock  ) 
 

Retransmit a segment after ACK timeout.

This function is called by the TCP timer.

Parameters:
sock Socket descriptor. This pointer must have been retrieved by calling NutTcpCreateSocket().
Returns:
Nonzero if socket was aborted due to reach of retransmit limit or network error.

NutTcpSm void *  arg  ) 
 

TCP state machine thread.

The TCP state machine serves two purposes: It processes incoming TCP segments and handles TCP timers.

void NutTcpStateMachine NETBUF nb  ) 
 

Process incoming TCP segments.

All incoming TCP packets are passed to this routine. They will be added to a global queue and processed by the TCP state machine, which is running on a separate thread.

Note:
This routine is called by the IP layer on incoming TCP segments. Applications typically do not call this function.

int NutTcpInitStateMachine void   ) 
 

Start TCP state machine.

The socket interface will automatically call this routine as soon as the first socket is created.

Returns:
0 on success, -1 otherwise.

int NutTcpAbortSocket TCPSOCKET sock,
u_short  last_error
 

Closes socket with error.

Aborts any socket activity and sets last error.

Parameters:
sock Socket descriptor.
last_error Error number to report
Note:
This routine is called internally by Nut/Net. Applications typically do not call this function.
Returns:
0 on success, -1 otherwise.

int IsInLimits u_long  x,
u_long  low,
u_long  high
 

Sequence number comparisons.

Return true if x is between low and high inclusive, false otherwise


© 2000-2006 by egnite Software GmbH - visit http://www.ethernut.de/