下面代码是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