19#include <tcp_private.h>
23#error Must select an IP version in tcp.h
29#error Must select IPV4ONLY or IPV6 but not both
354#define TCP_ERR_NORMAL (0)
355#define TCP_ERR_TIMEOUT (-1)
356#define TCP_ERR_NOCON (-2)
357#define TCP_ERR_CLOSING (-3)
358#define TCP_ERR_NOSUCH_SOCKET (-4)
359#define TCP_ERR_NONE_AVAIL (-5)
360#define TCP_ERR_CON_RESET (-6)
361#define TCP_ERR_CON_ABORT (-7)
542 int accept(
int listening_socket,
IPADDR *address, uint16_t *port, uint16_t timeout);
545int accept4(
int listening_socket,
IPADDR4 *address, uint16_t *port, uint16_t timeout);
546#define accept6 accept
548#define accept4 accept
1031int accept(
int listening_socket,
IPADDR *address, uint16_t *port, TickTimeout &timeout);
1547inline int connect(
const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout)
1549 TickTimeout tt(timeout);
1550 return CoreConnect(ipAddress, 0, remotePort, tt,
IPADDR::NullIP(), -1);
2046 TickTimeout tt(timeout);
2047 return CoreConnect(ipAddress, 0, remotePort, tt, localIpAddress, -1);
2692inline int connectvia(
const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout,
int ifnum)
2694 TickTimeout tt(timeout);
2695 return CoreConnect(ipAddress, 0, remotePort, tt,
IPADDR::NullIP(), ifnum);
3263 uint16_t remotePort,
3268 TickTimeout tt(timeout);
3269 return CoreConnect(ipAddress, localPort, remotePort, tt, localIpAddress, intf);
3275 inline int connect6(
const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout)
3277 TickTimeout tt(timeout);
3278 return CoreConnect(ipAddress, 0, remotePort, tt,
IPADDR::NullIP(), -1);
3280 inline int connectvia6(
const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout,
const IPADDR &localIpAddress)
3282 TickTimeout tt(timeout);
3283 return CoreConnect(ipAddress, 0, remotePort, tt, localIpAddress, -1);
3285 inline int connectvia6(
const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout,
int ifnum)
3287 TickTimeout tt(timeout);
3288 return CoreConnect(ipAddress, 0, remotePort, tt,
IPADDR::NullIP(), ifnum);
3290 inline int connectwlocal6(
const IPADDR &ipAddress,
3292 uint16_t remotePort,
3297 TickTimeout tt(timeout);
3298 return CoreConnect(ipAddress, localPort, remotePort, tt, localIpAddress, ifn);
3301 inline int connect4(
IPADDR4 ipAddress, uint16_t remotePort, uint32_t timeout)
3303 TickTimeout tt(timeout);
3304 return CoreConnect4(ipAddress, 0, remotePort, tt,
IPADDR4::NullIP(), -1);
3306 inline int connectvia4(
IPADDR4 ipAddress, uint16_t remotePort, uint32_t timeout,
IPADDR4 localIpAddress)
3308 TickTimeout tt(timeout);
3309 return CoreConnect4(ipAddress, 0, remotePort, tt, localIpAddress, -1);
3311 inline int connectvia4(
IPADDR4 ipAddress, uint16_t remotePort, uint32_t timeout,
int ifnum)
3313 TickTimeout tt(timeout);
3314 return CoreConnect4(ipAddress, 0, remotePort, tt,
IPADDR4::NullIP(), ifnum);
3316 inline int connectwlocal4(
IPADDR4 ipAddress,
3318 uint16_t remotePort,
3323 TickTimeout tt(timeout);
3324 return CoreConnect4(ipAddress, localPort, remotePort, tt, localIpAddress, ifn);
3327 #define connect4 connect
3328 #define connectvia4 connectvia
3329 #define connectwlocal4 connectwlocal
3931inline int connect(
const IPADDR &ipAddress, uint16_t remotePort, TickTimeout &timeout)
3933 return CoreConnect(ipAddress, 0, remotePort, timeout,
IPADDR::NullIP(), -1);
4653 return CoreConnect(ipAddress, 0, remotePort, timeout, localIpAddress, -1);
5381inline int connectvia(
const IPADDR &ipAddress, uint16_t remotePort, TickTimeout &timeout,
int ifnum)
5383 return CoreConnect(ipAddress, 0, remotePort, timeout,
IPADDR::NullIP(), ifnum);
5988 uint16_t remotePort,
5989 TickTimeout timeout,
5993 return CoreConnect(ipAddress, localPort, remotePort, timeout, localIpAddress, intf);
5998 inline int connect6(
const IPADDR &ipAddress, uint16_t remotePort, TickTimeout &timeout)
6000 return CoreConnect(ipAddress, 0, remotePort, timeout,
IPADDR::NullIP(), -1);
6002 inline int connectvia6(
const IPADDR &ipAddress, uint16_t remotePort, TickTimeout &timeout,
const IPADDR &localIpAddress)
6004 return CoreConnect(ipAddress, 0, remotePort, timeout, localIpAddress, -1);
6006 inline int connectvia6(
const IPADDR &ipAddress, uint16_t remotePort, TickTimeout &timeout,
int ifnum)
6008 return CoreConnect(ipAddress, 0, remotePort, timeout,
IPADDR::NullIP(), ifnum);
6010 inline int connectwlocal6(
const IPADDR &ipAddress,
6012 uint16_t remotePort,
6013 TickTimeout &timeout,
6017 return CoreConnect(ipAddress, localPort, remotePort, timeout, localIpAddress, ifn);
6020 inline int connect4(
IPADDR4 ipAddress, uint16_t remotePort, TickTimeout &timeout)
6022 return CoreConnect4(ipAddress, 0, remotePort, timeout,
IPADDR4::NullIP(), -1);
6024 inline int connectvia4(
IPADDR4 ipAddress, uint16_t remotePort, TickTimeout &timeout,
IPADDR4 localIpAddress)
6026 return CoreConnect4(ipAddress, 0, remotePort, timeout, localIpAddress, -1);
6028 inline int connectvia4(
IPADDR4 ipAddress, uint16_t remotePort, TickTimeout &timeout,
int ifnum)
6030 return CoreConnect4(ipAddress, 0, remotePort, timeout,
IPADDR4::NullIP(), ifnum);
6032 inline int connectwlocal4(
IPADDR4 ipAddress,
6034 uint16_t remotePort,
6035 TickTimeout &timeout,
6039 return CoreConnect4(ipAddress, localPort, remotePort, timeout, localIpAddress, ifn);
7516 return CoreListen(addr, port, -1, localIpAddress, maxpend);
7520 inline int listen6(
const IPADDR &addr, uint16_t port, uint8_t maxpend = 5)
7525 inline int listenvia6(
const IPADDR &addr, uint16_t port,
int ifn, uint8_t maxpend = 5)
7530 inline int listenvia6(
const IPADDR &addr, uint16_t port,
const IPADDR &localIpAddress, uint8_t maxpend = 5)
7532 return CoreListen(addr, port, -1, localIpAddress, maxpend);
7535 inline int listen4(
IPADDR4 addr, uint16_t port, uint8_t maxpend = 5)
7540 inline int listenvia4(
IPADDR4 addr, uint16_t port,
int ifn, uint8_t maxpend = 5)
7545 inline int listenvia4(
IPADDR4 addr, uint16_t port,
IPADDR4 localIpAddress, uint8_t maxpend = 5)
7547 return CoreListen4(addr, port, -1, localIpAddress, maxpend);
7550 #define listen4 listen
7551 #define listenvia4 listenvia
7895 return NoBlockCoreConnect(ipAddress, 0, remotePort,
IPADDR::NullIP(), -1);
7921 return NoBlockCoreConnect(ipAddress, 0, remotePort, interfaceIpAddress, -1);
8342 return NoBlockCoreConnect(ipAddress, 0, remotePort,
IPADDR::NullIP(), ifnum);
8812 uint16_t remotePort,
8816 return NoBlockCoreConnect(ipAddress, localPort, remotePort, interfaceIpAddress, ifn);
8821 inline int NoBlockConnect6(
const IPADDR &ipAddress, uint16_t remotePort)
8823 return NoBlockCoreConnect(ipAddress, 0, remotePort,
IPADDR::NullIP(), -1);
8826 inline int NoBlockConnectVia6(
const IPADDR &ipAddress, uint16_t remotePort,
const IPADDR &interfaceIpAddress =
IPADDR::NullIP())
8828 return NoBlockCoreConnect(ipAddress, 0, remotePort, interfaceIpAddress, -1);
8831 inline int NoBlockConnectVia6(
const IPADDR &ipAddress, uint16_t remotePort,
int ifnum)
8833 return NoBlockCoreConnect(ipAddress, 0, remotePort,
IPADDR::NullIP(), ifnum);
8836 inline int NoBlockConnectwlocal6(
const IPADDR &ipAddress, uint16_t localPort, uint16_t remotePort,
IPADDR interfaceIpAddress,
int ifn = -1)
8838 return NoBlockCoreConnect(ipAddress, localPort, remotePort, interfaceIpAddress, ifn);
8841 inline int NoBlockConnect4(
const IPADDR4 &ipAddress, uint16_t remotePort, uint32_t timeout)
8843 return NoBlockCoreConnect4(ipAddress, 0, remotePort,
IPADDR4::NullIP(), -1);
8848 return NoBlockCoreConnect4(ipAddress, 0, remotePort, interfaceIpAddress, -1);
8851 inline int NoBlockConnectVia4(
const IPADDR4 &ipAddress, uint16_t remotePort,
int ifn)
8853 return NoBlockCoreConnect4(ipAddress, 0, remotePort,
IPADDR4::NullIP(), ifn);
8856 inline int NoBlockConnectwlocal4(
const IPADDR4 &ipAddress,
8858 uint16_t remotePort,
8859 const IPADDR4 &interfaceIpAddress,
8862 return NoBlockCoreConnect4(ipAddress, localPort, remotePort, interfaceIpAddress, ifn);
8866 #define NoBlockConnect4 NoBlockConnect
8867 #define NoBlockConnectVia4 NoBlockConnectVia
8868 #define NoBlockConnectwlocal4 NoBlockConnectwlocal
9321IPADDR4 GetSocketRemoteAddr4(
int fd);
9322IPADDR4 GetSocketLocalAddr4(
int fd);
9325 bool bRemoteAddrIsIpV6();
9326 bool bLocalAddrIsIpV6();
9328 IPADDR GetSocketRemoteAddr6(
int fd);
9330 IPADDR GetSocketLocalAddr6(
int fd);
9395 return GetSocketRemoteAddr6(fd);
9472 return GetSocketLocalAddr6(fd);
9478 return GetSocketRemoteAddr4(fd);
9482 return GetSocketLocalAddr4(fd);
10884uint8_t SetOutOfOrderbuffers(
int fd, uint8_t max);
11305 return SetOutOfOrderbuffers(fd, max);
11309#if defined MULTIHOME || defined AUTOIP
11311 int connectvia4(
IPADDR4 addr, uint16_t localport, uint16_t remoteport, uint32_t timeout,
IPADDR4 ipa);
11312 int NoBlockconnectvia4(
IPADDR4 addr, uint16_t localport, uint16_t remoteport,
IPADDR4 ipa,
int intfnum = -1);
11313 int connectvia4(
IPADDR4 addr, uint16_t localport, uint16_t remoteport, uint32_t timeout,
int intfnum);
11316 int connectvia6(
const IPADDR &addr, uint16_t localport, uint16_t remoteport, uint32_t timeout,
const IPADDR &ipa);
11317 inline int connectvia(
const IPADDR &addr, uint16_t localport, uint16_t remoteport, uint32_t timeout,
const IPADDR &ipa)
11319 return connectvia6(addr, localport, remoteport, timeout, ipa);
11322 int connectvia6(
const IPADDR &addr, uint16_t localport, uint16_t remoteport, uint32_t timeout,
int intfnum);
11323 inline int connectvia(
const IPADDR &addr, uint16_t localport, uint16_t remoteport, uint32_t timeout,
int intfnum)
11325 return connectvia6(addr, localport, remoteport, timeout, intfnum);
11328 int NoBlockconnectvia6(
IPADDR4 addr, uint16_t localport, uint16_t remoteport,
const IPADDR &ipa);
11329 inline int NoBlockconnectvia(
IPADDR4 addr, uint16_t localport, uint16_t remoteport,
const IPADDR &ipa)
11331 return NoBlockconnectvia6(addr, localport, remoteport, ipa);
11334 int NoBlockconnectvia6(
IPADDR4 addr, uint16_t localport, uint16_t remoteport,
int intfnum);
11335 inline int NoBlockconnectvia(
IPADDR4 addr, uint16_t localport, uint16_t remoteport,
int intfnum)
11337 return NoBlockconnectvia6(addr, localport, remoteport, intfnum);
11342 return connectvia4(addr, localport, remoteport, timeout, ipa);
11345 inline int NoBlockconnectvia(
IPADDR4 addr, uint16_t localport, uint16_t remoteport,
IPADDR4 ipa)
11347 return NoBlockconnectvia4(addr, localport, remoteport, ipa);
11350 inline int connectvia(
IPADDR4 addr, uint16_t localport, uint16_t remoteport, uint32_t timeout,
int intfnum)
11352 return connectvia4(addr, localport, remoteport, timeout, intfnum);
11355 inline int NoBlockconnectvia(
IPADDR4 addr, uint16_t localport, uint16_t remoteport,
int intfnum)
11357 return NoBlockconnectvia4(addr, localport, remoteport, intfnum);
11374#define SO_NONAGLE 2
12268int setsocketackbuffers(
int fd, uint8_t val);
12337 return setsocketackbuffers(fd, val);
13117 typedef void(tcp_data_handler)(
int fd, puint8_t data, uint16_t len);
13118 void RegisterDataProcessor(
int fd, tcp_data_handler *pdh);
13301#define TCP_STATE_CLOSED (0)
13302#define TCP_STATE_LISTEN (1)
13303#define TCP_STATE_SYN_SENT (2)
13304#define TCP_STATE_SYN_RCVD (3)
13305#define TCP_STATE_WAIT_FOR_ACCEPT (4)
13306#define TCP_STATE_ESTABLISHED (5)
13307#define TCP_STATE_CLOSE_WAIT (6)
13308#define TCP_STATE_LAST_ACK (7)
13309#define TCP_STATE_FIN_WAIT_1 (8)
13310#define TCP_STATE_FIN_WAIT_2 (9)
13311#define TCP_STATE_CLOSING (10)
13312#define TCP_STATE_TIME_WAIT (11)
13933void TCPAssociateExtraData(
int tcpFd,
void *pData);
13934void *TCPGetExtraData(
int tcpFd);
13938#ifdef TCP_THROUGHPUT_INFO
13951 uint64_t TCPGetPayloadBytesSent(
int tcpFd);
13965 uint64_t TCPGetPayloadBytesReceived(
int tcpFd);
13981 uint64_t TCPGetTotalBytesSent(
int tcpFd);
13997 uint64_t TCPGetTotalBytesReceived(
int tcpFd);
Used to store and manipulate IPv4 addresses in dual stack mode.
Definition nettypes.h:225
static IPADDR4 NullIP()
C++ static function for a null IP address.
Definition nettypes.h:363
Used to hold and manipulate IPv4 and IPv6 addresses in dual stack mode.
Definition ipv6_addr.h:41
static IPADDR6 NullIP()
Static function to return a null IPADDR6 object.
int getsocketerror(int fd)
Get the error status of a socket.
BOOL WaitForSocketFlush(int fd, uint32_t ticks)
Wait for all transmitted data to be acknowledged.
uint16_t GetSocketLocalPort(int fd)
Get the local port number for a socket connection.
int NoBlockConnectwlocal(const IPADDR &ipAddress, uint16_t localPort, uint16_t remotePort, IPADDR interfaceIpAddress=IPADDR::NullIP(), int ifn=-1)
Initiate a non-blocking TCP connection with full local parameter control.
Definition tcp.h:8810
int TcpGetSocketInterface(int fd)
Get the network interface number associated with a TCP socket.
int listenvia(const IPADDR &addr, uint16_t port, int ifn, uint8_t maxpend=5)
Create a listening socket on a specific network interface.
Definition tcp.h:7299
int SetSocketUnackBuffers(int fd, uint8_t val)
Configure the maximum number of unacknowledged transmit buffers.
Definition tcp.h:12335
int connect(const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout)
Establish a TCP connection to a remote host.
Definition tcp.h:1547
int SetSocketTxBuffers(int fd, int n)
Configure the number of TCP transmit buffers.
IPADDR GetSocketLocalAddr(int fd)
Get the local interface IP address for a socket connection.
Definition tcp.h:9470
uint16_t GetSocketRemotePort(int fd)
Get the remote host port number for a socket connection.
int NoBlockConnect(const IPADDR &ipAddress, uint16_t remotePort)
Initiate a non-blocking TCP connection.
Definition tcp.h:7893
int GetTcpRtxCount(int fd)
Get the number of TCP retransmissions on a socket.
int getsockoption(int fd)
Query current TCP socket options.
int connectvia(const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout, const IPADDR &localIpAddress)
Establish a TCP connection using a specific local interface IP address.
Definition tcp.h:2044
uint16_t TcpGetTxDataWaiting(int fd)
Get the number of bytes queued for transmission.
int clrsockoption(int fd, int option)
Disable TCP socket options.
void EnableTcpDebug(uint16_t dbFlags)
Enable TCP debug output with specified flags.
void TcpSendKeepAlive(int fd)
Send a TCP keepalive probe packet.
int SockReadWithTimeout(int fd, char *buf, int nbytes, uint32_t timeout)
Read from a TCP socket with a timeout.
void DumpTcpDebug()
Display current TCP debug information to the console.
int connectwlocal(const IPADDR &ipAddress, uint16_t localPort, uint16_t remotePort, uint32_t timeout, const IPADDR &localIpAddress=IPADDR::NullIP(), int intf=-1)
Establish a TCP connection with full control over local parameters.
Definition tcp.h:3261
int abortsocket(int fd)
Abort a TCP connection immediately.
int NoBlockConnectVia(const IPADDR &ipAddress, uint16_t remotePort, const IPADDR &interfaceIpAddress=IPADDR::NullIP())
Initiate a non-blocking TCP connection via a specific interface.
Definition tcp.h:7919
int accept(int listening_socket, IPADDR *address, uint16_t *port, uint16_t timeout)
Accept an incoming connection on a listening socket.
IPADDR GetSocketRemoteAddr(int fd)
Get the remote host IP address for a socket connection.
Definition tcp.h:9393
int listen(const IPADDR &addr, uint16_t port, uint8_t maxpend=5)
Create a listening socket to accept incoming TCP connections.
Definition tcp.h:6629
BOOL TcpAllDataAcked(int socket)
Check if all transmitted data has been acknowledged.
uint16_t TcpGetRxBufferSpaceUsed(int fd)
Get the number of bytes currently in the receive buffer.
uint32_t TcpGetLastRxTime(int fd)
Get the system tick count when the last packet was received.
uint32_t TcpGetLastRxInterval(int fd)
Get the time elapsed since the last received packet.
int SetSocketRxBuffers(int fd, int n)
Configure the number of TCP receive buffers.
int setsockoption(int fd, int option)
Enable TCP socket options.
uint8_t TcpGetSocketState(int fd)
Get the current TCP state of a socket.
uint16_t TcpGetTxBufferAvailSpace(int fd)
Get the available space in the transmit buffer.
uint8_t SetOutOfOrderBuffers(int fd, uint8_t max)
Configure the maximum number of out-of-order buffers for a TCP socket.
Definition tcp.h:11303
char SocketPeek(int fd)
Peek at the next available byte without removing it from the receive buffer.
void RegisterTCPWriteNotify(int tcpFd, tcp_notify_handler *notifyHandler)
Register a callback for write event notifications.
void RegisterTCPReadNotify(int tcpFd, tcp_notify_handler *notifyHandler)
Register a callback for read event notifications.
void tcp_notify_handler(int tcpFd)
TCP notification callback function type.
Definition tcp.h:13545