📄 net_sock.h
字号:
/*
*********************************************************************************************************
* uC/TCP-IP
* The Embedded TCP/IP Suite
*
* (c) Copyright 2003-2006; Micrium, Inc.; Weston, FL
*
* All rights reserved. Protected by international copyright laws.
*
* uC/TCP-IP is provided in source form for FREE evaluation, for educational
* use or peaceful research. If you plan on using uC/TCP-IP in a commercial
* product you need to contact Micrium to properly license its use in your
* product. We provide ALL the source code for your convenience and to help
* you experience uC/TCP-IP. The fact that the source code is provided does
* NOT mean that you can use it without paying a licensing fee.
*
* Knowledge of the source code may NOT be used to develop a similar product.
*
* Please help us continue to provide the Embedded community with the finest
* software available. Your honesty is greatly appreciated.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
* NETWORK SOCKET LAYER
*
* Filename : net_sock.h
* Version : V1.87
* Programmer(s) : ITJ
*********************************************************************************************************
* Note(s) : (1) Supports BSD 4.x Socket Layer with the following restrictions/constraints :
*
* (a) ONLY supports a single address family from the following families :
* (1) IPv4 (AF_INET)
*
* (b) ONLY supports the following socket types :
* (1) Datagram (SOCK_DGRAM)
* (2) Stream (SOCK_STREAM)
*
* (c) ONLY supports a single protocol family from the following families :
* (1) IPv4 (PF_INET)
* (A) ONLY supports the following protocols :
* (1) UDP (IPPROTO_UDP)
* (2) TCP (IPPROTO_TCP)
*
* (d) ONLY supports the following socket options :
* (1) Global options
* #### ( )
* (2) Socket options
* #### ( )
*
*********************************************************************************************************
*/
/*$PAGE*/
/*
*********************************************************************************************************
* MODULE
*
* Note(s) : (1) Socket module is required for :
*
* (a) IPv4 Sockets
* (1) UDP Datagram Sockets
* (2) TCP Stream Sockets
*
*
* See also 'net_sock.h Note #1c',
* 'net_cfg.h TRANSPORT LAYER CONFIGURATION',
* & 'net_cfg.h USER DATAGRAM PROTOCOL LAYER CONFIGURATION'.
*
* (2) The following socket-module-present configuration value MUST be pre-#define'd in
* 'net_cfg_net.h' PRIOR to all other network modules that require Network Socket Layer
* Configuration (see 'net_cfg_net.h NETWORK SOCKET LAYER CONFIGURATION Note #2b') :
*
* NET_SOCK_MODULE_PRESENT
*********************************************************************************************************
*/
#ifdef NET_SOCK_MODULE_PRESENT /* See Note #2. */
/*
*********************************************************************************************************
* EXTERNS
*********************************************************************************************************
*/
#ifdef NET_SOCK_MODULE
#define NET_SOCK_EXT
#else
#define NET_SOCK_EXT extern
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* DEFINES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* NETWORK SOCKET IDENTIFICATION NUMBER DEFINES
*********************************************************************************************************
*/
#define NET_SOCK_ID_NONE -1
#define NET_SOCK_ID_MIN 0
#define NET_SOCK_ID_MAX (NET_SOCK_CFG_NBR_SOCK - 1)
/*
*********************************************************************************************************
* NETWORK SOCKET PORT NUMBER DEFINES
*********************************************************************************************************
*/
#define NET_SOCK_PORT_NBR_RESERVED NET_PORT_NBR_RESERVED
#define NET_SOCK_PORT_NBR_NONE NET_SOCK_PORT_NBR_RESERVED
#define NET_SOCK_PORT_NBR_RANDOM_NBR_OFF 10
#define NET_SOCK_PORT_NBR_RANDOM_NBR (NET_SOCK_CFG_NBR_SOCK + NET_SOCK_PORT_NBR_RANDOM_NBR_OFF)
#if (NET_SOCK_PORT_NBR_RANDOM_NBR > DEF_INT_16U_MAX_VAL)
#undef NET_SOCK_PORT_NBR_RANDOM_NBR
#define NET_SOCK_PORT_NBR_RANDOM_NBR DEF_INT_16U_MAX_VAL
#endif
#define NET_SOCK_PORT_NBR_RANDOM_MIN NET_SOCK_CFG_PORT_NBR_RANDOM_BASE
#define NET_SOCK_PORT_NBR_RANDOM_MAX (NET_SOCK_CFG_PORT_NBR_RANDOM_BASE + NET_SOCK_PORT_NBR_RANDOM_NBR - 1)
/*$PAGE*/
/*
*********************************************************************************************************
* NETWORK SOCKET STATES
*********************************************************************************************************
*/
#define NET_SOCK_STATE_NONE 0
#define NET_SOCK_STATE_FREE 1
#define NET_SOCK_STATE_DISCARD 2
#define NET_SOCK_STATE_CLOSED 10
#define NET_SOCK_STATE_CLOSED_FAULT 11
#define NET_SOCK_STATE_CLOSE_IN_PROGRESS 15
#define NET_SOCK_STATE_CLOSING_DATA_AVAIL 16
#define NET_SOCK_STATE_BOUND 20
#define NET_SOCK_STATE_LISTEN 30
#define NET_SOCK_STATE_CONN 40
#define NET_SOCK_STATE_CONN_IN_PROGRESS 41
#define NET_SOCK_STATE_CONN_DONE 42
/*
*********************************************************************************************************
* NETWORK SOCKET FLAG DEFINES
*********************************************************************************************************
*/
/* ------------------ NET SOCK FLAGS ------------------ */
#define NET_SOCK_FLAG_NONE DEF_BIT_NONE
#define NET_SOCK_FLAG_USED DEF_BIT_00 /* Sock cur used; i.e. NOT in free sock pool. */
#define NET_SOCK_FLAG_BLOCK DEF_BIT_01 /* Sock blocking ENABLED. */
/*
*********************************************************************************************************
* NETWORK SOCKET TYPE DEFINES
*
* Note(s) : (1) NET_SOCK_TYPE_??? #define values specifically chosen as ASCII representations of the socket
* types. Memory dumps of socket types will display the socket TYPE with the chosen ASCII name.
*********************************************************************************************************
*/
/* ------------------ NET SOCK TYPES ------------------ */
#if (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_BIG)
#define NET_SOCK_TYPE_SOCK_NONE 0x4E4F4E45 /* "NONE" in ASCII. */
#define NET_SOCK_TYPE_SOCK 0x534F434B /* "SOCK" in ASCII. */
#else
#if (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_32)
#define NET_SOCK_TYPE_SOCK_NONE 0x454E4F4E /* "NONE" in ASCII. */
#define NET_SOCK_TYPE_SOCK 0x4B434F53 /* "SOCK" in ASCII. */
#elif (CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_16)
#define NET_SOCK_TYPE_SOCK_NONE 0x4F4E454E /* "NONE" in ASCII. */
#define NET_SOCK_TYPE_SOCK 0x4F534B43 /* "SOCK" in ASCII. */
#else /* Dflt CPU_WORD_SIZE_08. */
#define NET_SOCK_TYPE_SOCK_NONE 0x4E4F4E45 /* "NONE" in ASCII. */
#define NET_SOCK_TYPE_SOCK 0x534F434B /* "SOCK" in ASCII. */
#endif
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* NETWORK SOCKET FAMILY & PROTOCOL DEFINES
*
* Note(s) : (1) The following socket values MUST be pre-#define'd in 'net_def.h' PRIOR to 'net_cfg.h'
* so that the developer can configure sockets for the correct socket family values (see
* 'net_def.h BSD 4.x & NETWORK SOCKET LAYER DEFINES Note #1' & 'net_cfg_net.h NETWORK
* SOCKET LAYER CONFIGURATION') :
*
* AF_INET 2
* PF_INET AF_INET
*
* NET_SOCK_FAMILY_IP_V4 PF_INET
* NET_SOCK_PROTOCOL_MAX_IP_V4 2
* NET_SOCK_ADDR_LEN_IP_V4 6
*********************************************************************************************************
*/
/* -------------------- SOCK TYPES -------------------- */
#define NET_SOCK_TYPE_NONE 0
#define NET_SOCK_TYPE_DATAGRAM SOCK_DGRAM
#define NET_SOCK_TYPE_STREAM SOCK_STREAM
/* -------------- TCP/IP SOCK PROTOCOLS --------------- */
#define NET_SOCK_PROTOCOL_DFLT 0
#define NET_SOCK_PROTOCOL_NONE NET_SOCK_PROTOCOL_DFLT
#define NET_SOCK_PROTOCOL_UDP IPPROTO_UDP
#define NET_SOCK_PROTOCOL_TCP IPPROTO_TCP
/*$PAGE*/
/*
*********************************************************************************************************
* NETWORK SOCKET ADDRESS DEFINES
*********************************************************************************************************
*/
/* ------------------ SOCK ADDR CFG ------------------- */
#if (NET_SOCK_CFG_FAMILY == NET_SOCK_FAMILY_IP_V4)
#define NET_SOCK_ADDR_IP_LEN_PORT (sizeof(NET_PORT_NBR))
#define NET_SOCK_ADDR_IP_LEN_ADDR (sizeof(NET_IP_ADDR))
#define NET_SOCK_ADDR_IP_IX_BASE 0
#define NET_SOCK_ADDR_IP_IX_PORT NET_SOCK_ADDR_IP_IX_BASE
#define NET_SOCK_ADDR_IP_IX_ADDR (NET_SOCK_ADDR_IP_IX_PORT + NET_SOCK_ADDR_IP_LEN_PORT)
#define NET_SOCK_ADDR_IP_WILD_CARD INADDR_ANY
#define NET_SOCK_ADDR_IP_BROADCAST INADDR_BROADCAST
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* NETWORK SOCKET API DEFINES
*********************************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -