21#include <tcp_private.h>
25#error Must select an IP version in tcp.h
31#error Must select IPV4ONLY or IPV6 but not both
46#define TCP_ERR_NORMAL (0)
47#define TCP_ERR_TIMEOUT (-1)
48#define TCP_ERR_NOCON (-2)
49#define TCP_ERR_CLOSING (-3)
50#define TCP_ERR_NOSUCH_SOCKET (-4)
51#define TCP_ERR_NONE_AVAIL (-5)
52#define TCP_ERR_CON_RESET (-6)
53#define TCP_ERR_CON_ABORT (-7)
76int accept(
int listening_socket,
IPADDR *address, uint16_t *port, uint16_t timeout);
79int accept4(
int listening_socket,
IPADDR4 *address, uint16_t *port, uint16_t timeout);
119inline int connect(
const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout)
122 return CoreConnect(ipAddress, 0, remotePort, tt,
IPADDR::NullIP(), -1);
146 return CoreConnect(ipAddress, 0, remotePort, tt, localIpAddress, -1);
168inline int connectvia(
const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout,
int ifnum)
171 return CoreConnect(ipAddress, 0, remotePort, tt,
IPADDR::NullIP(), ifnum);
207 return CoreConnect(ipAddress, localPort, remotePort, tt, localIpAddress, intf);
211inline int connect6(
const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout)
214 return CoreConnect(ipAddress, 0, remotePort, tt,
IPADDR::NullIP(), -1);
216inline int connectvia6(
const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout,
const IPADDR &localIpAddress)
219 return CoreConnect(ipAddress, 0, remotePort, tt, localIpAddress, -1);
221inline int connectvia6(
const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout,
int ifnum)
224 return CoreConnect(ipAddress, 0, remotePort, tt,
IPADDR::NullIP(), ifnum);
226inline int connectwlocal6(
const IPADDR &ipAddress,
234 return CoreConnect(ipAddress, localPort, remotePort, tt, localIpAddress, ifn);
237inline int connect4(
IPADDR4 ipAddress, uint16_t remotePort, uint32_t timeout)
240 return CoreConnect4(ipAddress, 0, remotePort, tt,
IPADDR4::NullIP(), -1);
242inline int connectvia4(
IPADDR4 ipAddress, uint16_t remotePort, uint32_t timeout,
IPADDR4 localIpAddress)
245 return CoreConnect4(ipAddress, 0, remotePort, tt, localIpAddress, -1);
247inline int connectvia4(
IPADDR4 ipAddress, uint16_t remotePort, uint32_t timeout,
int ifnum)
250 return CoreConnect4(ipAddress, 0, remotePort, tt,
IPADDR4::NullIP(), ifnum);
252inline int connectwlocal4(
IPADDR4 ipAddress,
260 return CoreConnect4(ipAddress, localPort, remotePort, tt, localIpAddress, ifn);
263#define connect4 connect
264#define connectvia4 connectvia
265#define connectwlocal4 connectwlocal
269 return CoreConnect(ipAddress, 0, remotePort, timeout,
IPADDR::NullIP(), -1);
274 return CoreConnect(ipAddress, 0, remotePort, timeout, localIpAddress, -1);
278 return CoreConnect(ipAddress, 0, remotePort, timeout,
IPADDR::NullIP(), ifnum);
287 return CoreConnect(ipAddress, localPort, remotePort, timeout, localIpAddress, intf);
291inline int connect6(
const IPADDR &ipAddress, uint16_t remotePort,
TickTimeout &timeout)
293 return CoreConnect(ipAddress, 0, remotePort, timeout,
IPADDR::NullIP(), -1);
295inline int connectvia6(
const IPADDR &ipAddress, uint16_t remotePort,
TickTimeout &timeout,
const IPADDR &localIpAddress)
297 return CoreConnect(ipAddress, 0, remotePort, timeout, localIpAddress, -1);
299inline int connectvia6(
const IPADDR &ipAddress, uint16_t remotePort,
TickTimeout &timeout,
int ifnum)
301 return CoreConnect(ipAddress, 0, remotePort, timeout,
IPADDR::NullIP(), ifnum);
303inline int connectwlocal6(
const IPADDR &ipAddress,
310 return CoreConnect(ipAddress, localPort, remotePort, timeout, localIpAddress, ifn);
315 return CoreConnect4(ipAddress, 0, remotePort, timeout,
IPADDR4::NullIP(), -1);
319 return CoreConnect4(ipAddress, 0, remotePort, timeout, localIpAddress, -1);
321inline int connectvia4(
IPADDR4 ipAddress, uint16_t remotePort,
TickTimeout &timeout,
int ifnum)
323 return CoreConnect4(ipAddress, 0, remotePort, timeout,
IPADDR4::NullIP(), ifnum);
325inline int connectwlocal4(
IPADDR4 ipAddress,
332 return CoreConnect4(ipAddress, localPort, remotePort, timeout, localIpAddress, ifn);
356inline int listen(
const IPADDR &addr, uint16_t port, uint8_t maxpend = 5)
405 return CoreListen(addr, port, -1, localIpAddress, maxpend);
410inline int listen6(
const IPADDR &addr, uint16_t port, uint8_t maxpend = 5)
415inline int listenvia6(
const IPADDR &addr, uint16_t port,
int ifn, uint8_t maxpend = 5)
420inline int listenvia6(
const IPADDR &addr, uint16_t port,
const IPADDR &localIpAddress, uint8_t maxpend = 5)
422 return CoreListen(addr, port, -1, localIpAddress, maxpend);
425inline int listen4(
IPADDR4 addr, uint16_t port, uint8_t maxpend = 5)
430inline int listenvia4(
IPADDR4 addr, uint16_t port,
int ifn, uint8_t maxpend = 5)
435inline int listenvia4(
IPADDR4 addr, uint16_t port,
IPADDR4 localIpAddress, uint8_t maxpend = 5)
437 return CoreListen4(addr, port, -1, localIpAddress, maxpend);
441#define listen4 listen
442#define listenvia4 listenvia
467 return NoBlockCoreConnect(ipAddress, 0, remotePort,
IPADDR::NullIP(), -1);
496 return NoBlockCoreConnect(ipAddress, 0, remotePort, interfaceIpAddress, -1);
525 return NoBlockCoreConnect(ipAddress, 0, remotePort,
IPADDR::NullIP(), ifnum);
567 return NoBlockCoreConnect(ipAddress, localPort, remotePort, interfaceIpAddress, ifn);
571inline int NoBlockConnect6(
const IPADDR &ipAddress, uint16_t remotePort)
573 return NoBlockCoreConnect(ipAddress, 0, remotePort,
IPADDR::NullIP(), -1);
576inline int NoBlockConnectVia6(
const IPADDR &ipAddress, uint16_t remotePort,
const IPADDR &interfaceIpAddress =
IPADDR::NullIP())
578 return NoBlockCoreConnect(ipAddress, 0, remotePort, interfaceIpAddress, -1);
581inline int NoBlockConnectVia6(
const IPADDR &ipAddress, uint16_t remotePort,
int ifnum)
583 return NoBlockCoreConnect(ipAddress, 0, remotePort,
IPADDR::NullIP(), ifnum);
586inline int NoBlockConnectwlocal6(
const IPADDR &ipAddress, uint16_t localPort, uint16_t remotePort,
IPADDR interfaceIpAddress,
int ifn = -1)
588 return NoBlockCoreConnect(ipAddress, localPort, remotePort, interfaceIpAddress, ifn);
591inline int NoBlockConnect4(
const IPADDR4 &ipAddress, uint16_t remotePort, uint32_t timeout)
593 return NoBlockCoreConnect4(ipAddress, 0, remotePort,
IPADDR4::NullIP(), -1);
598 return NoBlockCoreConnect4(ipAddress, 0, remotePort, interfaceIpAddress, -1);
601inline int NoBlockConnectVia4(
const IPADDR4 &ipAddress, uint16_t remotePort,
int ifn)
603 return NoBlockCoreConnect4(ipAddress, 0, remotePort,
IPADDR4::NullIP(), ifn);
606inline int NoBlockConnectwlocal4(
const IPADDR4 &ipAddress,
609 const IPADDR4 &interfaceIpAddress,
612 return NoBlockCoreConnect4(ipAddress, localPort, remotePort, interfaceIpAddress, ifn);
616#define NoBlockConnect4 NoBlockConnect
617#define NoBlockConnectVia4 NoBlockConnectVia
618#define NoBlockConnectwlocal4 NoBlockConnectwlocal
622int getsocketerror(
int fd);
625IPADDR4 GetSocketRemoteAddr4(
int fd);
626IPADDR4 GetSocketLocalAddr4(
int fd);
629bool bRemoteAddrIsIpV6();
630bool bLocalAddrIsIpV6();
632IPADDR GetSocketRemoteAddr6(
int fd);
634IPADDR GetSocketLocalAddr6(
int fd);
647 return GetSocketRemoteAddr6(fd);
661 return GetSocketLocalAddr6(fd);
666 return GetSocketRemoteAddr4(fd);
670 return GetSocketLocalAddr4(fd);
770uint8_t SetOutOfOrderbuffers(
int fd, uint8_t max);
791 return SetOutOfOrderbuffers(fd, max);
794#if defined MULTIHOME || defined AUTOIP
796int connectvia4(
IPADDR4 addr, uint16_t localport, uint16_t remoteport, uint32_t timeout,
IPADDR4 ipa);
797int NoBlockconnectvia4(
IPADDR4 addr, uint16_t localport, uint16_t remoteport,
IPADDR4 ipa,
int intfnum = -1);
798int connectvia4(
IPADDR4 addr, uint16_t localport, uint16_t remoteport, uint32_t timeout,
int intfnum);
801int connectvia6(
const IPADDR &addr, uint16_t localport, uint16_t remoteport, uint32_t timeout,
const IPADDR &ipa);
802inline int connectvia(
const IPADDR &addr, uint16_t localport, uint16_t remoteport, uint32_t timeout,
const IPADDR &ipa)
804 return connectvia6(addr, localport, remoteport, timeout, ipa);
807int connectvia6(
const IPADDR &addr, uint16_t localport, uint16_t remoteport, uint32_t timeout,
int intfnum);
808inline int connectvia(
const IPADDR &addr, uint16_t localport, uint16_t remoteport, uint32_t timeout,
int intfnum)
810 return connectvia6(addr, localport, remoteport, timeout, intfnum);
813int NoBlockconnectvia6(
IPADDR4 addr, uint16_t localport, uint16_t remoteport,
const IPADDR &ipa);
814inline int NoBlockconnectvia(
IPADDR4 addr, uint16_t localport, uint16_t remoteport,
const IPADDR &ipa)
816 return NoBlockconnectvia6(addr, localport, remoteport, ipa);
819int NoBlockconnectvia6(
IPADDR4 addr, uint16_t localport, uint16_t remoteport,
int intfnum);
820inline int NoBlockconnectvia(
IPADDR4 addr, uint16_t localport, uint16_t remoteport,
int intfnum)
822 return NoBlockconnectvia6(addr, localport, remoteport, intfnum);
828 return connectvia4(addr, localport, remoteport, timeout, ipa);
831inline int NoBlockconnectvia(
IPADDR4 addr, uint16_t localport, uint16_t remoteport,
IPADDR4 ipa)
833 return NoBlockconnectvia4(addr, localport, remoteport, ipa);
836inline int connectvia(
IPADDR4 addr, uint16_t localport, uint16_t remoteport, uint32_t timeout,
int intfnum)
838 return connectvia4(addr, localport, remoteport, timeout, intfnum);
841inline int NoBlockconnectvia(
IPADDR4 addr, uint16_t localport, uint16_t remoteport,
int intfnum)
843 return NoBlockconnectvia4(addr, localport, remoteport, intfnum);
895int setsocketackbuffers(
int fd, uint8_t val);
919 return setsocketackbuffers(fd, val);
1002void EnableTcpDebug(uint16_t dbFlags);
1005typedef void(tcp_data_handler)(
int fd, puint8_t data, uint16_t len);
1006void RegisterDataProcessor(
int fd, tcp_data_handler *pdh);
1026#define TCP_STATE_CLOSED (0)
1027#define TCP_STATE_LISTEN (1)
1028#define TCP_STATE_SYN_SENT (2)
1029#define TCP_STATE_SYN_RCVD (3)
1030#define TCP_STATE_WAIT_FOR_ACCEPT (4)
1031#define TCP_STATE_ESTABLISHED (5)
1032#define TCP_STATE_CLOSE_WAIT (6)
1033#define TCP_STATE_LAST_ACK (7)
1034#define TCP_STATE_FIN_WAIT_1 (8)
1035#define TCP_STATE_FIN_WAIT_2 (9)
1036#define TCP_STATE_CLOSING (10)
1037#define TCP_STATE_TIME_WAIT (11)
1178void TCPAssociateExtraData(
int tcpFd,
void *pData);
1179void *TCPGetExtraData(
int tcpFd);
1181#ifdef TCP_THROUGHPUT_INFO
1194uint64_t TCPGetPayloadBytesSent(
int tcpFd);
1208uint64_t TCPGetPayloadBytesReceived(
int tcpFd);
1222uint64_t TCPGetTotalBytesSent(
int tcpFd);
1236uint64_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.
TickTimeout objects are used to facilitate sequential function calls with timeout parameters that nee...
Definition nbrtos.h:168
BOOL WaitForSocketFlush(int fd, uint32_t ticks)
Wait for a socket flush operation to complete. A socket is flushed if all sent data has been acknowle...
uint16_t GetSocketLocalPort(int fd)
Returns the local port number associated with the connection.
int NoBlockConnectwlocal(const IPADDR &ipAddress, uint16_t localPort, uint16_t remotePort, IPADDR interfaceIpAddress=IPADDR::NullIP(), int ifn=-1)
Create a file descriptor for a TCP connection and return immediately. This function does not wait for...
Definition tcp.h:561
int TcpGetSocketInterface(int fd)
Return the network interface associated with a TCP socket.
int listenvia(const IPADDR &addr, uint16_t port, int ifn, uint8_t maxpend=5)
Listen for incoming connections on the specified network interface IP address.
Definition tcp.h:379
int SetSocketUnackBuffers(int fd, uint8_t val)
Set the maximum number of outbound TCP buffers in the transmit un-acknowledged list for the specified...
Definition tcp.h:917
int connect(const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout)
Make an outgoing TCP connection to a remote host.
Definition tcp.h:119
int SetSocketTxBuffers(int fd, int n)
Set the number of TCP transmit buffers for the specified TCP socket.
IPADDR GetSocketLocalAddr(int fd)
Returns the IP address of the local interface associated with the connection.
Definition tcp.h:659
uint16_t GetSocketRemotePort(int fd)
Returns the port number of the remote host associated with the connection.
int NoBlockConnect(const IPADDR &ipAddress, uint16_t remotePort)
Create a file descriptor for a TCP connection and return immediately. This function does not wait for...
Definition tcp.h:465
int GetTcpRtxCount(int fd)
Returns the number of re-transmits that have occurred on the specified connection.
int getsockoption(int fd)
Returns the options for the specified TCP socket.
int connectvia(const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout, const IPADDR &localIpAddress)
Make an outgoing TCP connection to a remote host using the specified local interface IP address.
Definition tcp.h:143
uint16_t TcpGetTxDataWaiting(int fd)
Returns the number of bytes waiting to be sent in a socket's TX Buffer.
int clrsockoption(int fd, int option)
Clear TCP socket options.
void TcpSendKeepAlive(int fd)
Send a TCP keep alive packet to a remote host.
int SockReadWithTimeout(int fd, char *buf, int nbytes, uint32_t timeout)
Attempt to read from a TCP socket until the timeout expires.
int connectwlocal(const IPADDR &ipAddress, uint16_t localPort, uint16_t remotePort, uint32_t timeout, const IPADDR &localIpAddress=IPADDR::NullIP(), int intf=-1)
Make an outgoing TCP connection to a remote host using the specified local interface number or IP add...
Definition tcp.h:199
int abortsocket(int fd)
Execute an abort on the specified TCP socket.
int NoBlockConnectVia(const IPADDR &ipAddress, uint16_t remotePort, const IPADDR &interfaceIpAddress=IPADDR::NullIP())
Create a file descriptor for a TCP connection and return immediately. This function does not wait for...
Definition tcp.h:494
int accept(int listening_socket, IPADDR *address, uint16_t *port, uint16_t timeout)
Accept an incoming connection from a listening socket.
IPADDR GetSocketRemoteAddr(int fd)
Returns the IP address of the remote host associated with the specified file descriptor.
Definition tcp.h:645
int listen(const IPADDR &addr, uint16_t port, uint8_t maxpend=5)
Listen for incoming connections on the specified network interface IP address.
Definition tcp.h:356
BOOL TcpAllDataAcked(int socket)
Check the data acknowledged state of a socket.
uint16_t TcpGetRxBufferSpaceUsed(int fd)
Returns the number of bytes used in a socket's RX buffer.
uint32_t TcpGetLastRxTime(int fd)
Returns the value of system Time Ticks when the last packet was received. Used for the TCP Keep Alive...
uint32_t TcpGetLastRxInterval(int fd)
Returns the number of system Time Ticks since the last packet was received. This is the difference be...
int SetSocketRxBuffers(int fd, int n)
Set the number of TCP receive buffers for the specified TCP socket.
int setsockoption(int fd, int option)
Set TCP socket options.
uint8_t TcpGetSocketState(int fd)
Return the current state of a TCP socket.
uint16_t TcpGetTxBufferAvailSpace(int fd)
Returns the number of bytes available in a socket's TX buffer.
uint8_t SetOutOfOrderBuffers(int fd, uint8_t max)
Set the maximum number of out-of-order TCP buffers for the specified TCP socket.
Definition tcp.h:789
char SocketPeek(int fd)
Returns the next char that would be read, 0 if no data.
void RegisterTCPWriteNotify(int tcpFd, tcp_notify_handler *notifyHandler)
Register a TCP socket and callback function for write notifications.
void RegisterTCPReadNotify(int tcpFd, tcp_notify_handler *notifyHandler)
Register a TCP socket and callback function for read notifications.
void tcp_notify_handler(int tcpFd)
TCP notification callback type.
Definition tcp.h:1149
NetBurner IP Definitions.
NetBurner IPADDR4 Class. See the IPADDR4 Class page for complete documentation.