下面代码是CH57xNET.h中的一部分,按照描述,SocketInf[ ].ScokStatus表示当前socket的状态和TCP连接状态。最低字节表示socket状态,次低字节表示tcp状态。
实际使用中发现,对于TCP类型的socket,ScokStatus高3字节永远是00,只有最低字节为0x05或0x00表示socket状态,而TCP状态一直是0x00。
TCP连接是正常的,可以正常收发数据。
请问这是哪里用法不对吗?或者是库的bug?
/* socket状态 */
#define SOCK_STAT_CLOSED 0X00 /* socket关闭 */
#define SOCK_STAT_OPEN 0X05 /* socket打开 */
/* TCP状态 */
#define TCP_CLOSED 0 /* TCP连接 */
#define TCP_LISTEN 1 /* TCP关闭 */
#define TCP_SYN_SENT 2 /* SYN发送,连接请求 */
#define TCP_SYN_RCVD 3 /* SYN接收,接收到连接请求 */
#define TCP_ESTABLISHED 4 /* TCP连接建立 */
#define TCP_FIN_WAIT_1 5 /* WAIT_1状态 */
#define TCP_FIN_WAIT_2 6 /* WAIT_2状态 */
#define TCP_CLOSE_WAIT 7 /* 等待关闭 */
#define TCP_CLOSING 8 /* 正在关闭 */
#define TCP_LAST_ACK 9 /* LAST_ACK*/
#define TCP_TIME_WAIT 10 /* 2MSL等待 */
/* sokcet信息表 */
#ifndef ST_SCOK_INF
#define ST_SCOK_INF
typedef struct _SCOK_INF
{
UINT32 IntStatus; /* 中断状态 */
UINT32 SockIndex; /* Socket索引值 */
UINT32 RecvStartPoint; /* 接收缓冲区的开始指针 */
UINT32 RecvBufLen; /* 接收缓冲区长度 */
UINT32 RecvCurPoint; /* 接收缓冲区的当前指针 */
UINT32 RecvReadPoint; /* 接收缓冲区的读指针 */
UINT32 RecvRemLen; /* 接收缓冲区的剩余长度 */
UINT32 ProtoType; /* 协议类型 */
UINT32 ScokStatus; /* 低字节Socket状态,次低字节为TCP状态,仅TCP模式下有意义 */
UINT32 DesPort; /* 目的端口 */
UINT32 SourPort; /* 源端口在IPRAW模式下为协议类型 */
UINT8 IPAddr[4]; /* Socket目标IP地址 32bit*/
void *Resv1; /* 保留,内部使用,用于保存各个PCB */
void *Resv2; /* 保留,内部使用,TCP Server使用 */
// void (*RecvCallBack)(struct _SCOK_INF *socinf,UINT32 ipaddr,UINT16 port,UINT8 *buf,UINT32 len); /* 接收回调函数*/
void (*AppCallBack)(struct _SCOK_INF *,UINT32 ,UINT16 ,UINT8 *,UINT32 ); /* 接收回调函数*/
}SOCK_INF;
#endif