📄 socket4.h
字号:
#ifndef _SOCKET4_H_
#define _SOCKET4_H_
#include <Socket3.h>
#define ARP_CACHE_EMPTY 0
#define ARP_CACHE_STATIC 1
#define ARP_CACHE_ILLIGAL 2
#define ARP_CACHE_DYNAMIC 3
#define IPPORT_FUNCTION_COUNT 10
#define MAX_ARP_CACHE 10
//Arp缓冲
typedef struct tagARPCACHE
{
ETHERNET_ADDRESS mEthernetAddr;
IP_ADDRESS mIPAddr;
WORD wType;//类型1=其它;2=非法;3=动态的;4=静态的
//时间
DWORD dwTime;
}ARPCACHE;
struct IPPORT_FUNCTION
{
BOOL bExist;
BYTE byProtoent;
IP_ADDRESS mSelfAddr;
IP_ADDRESS mPeerAddr;
WORD wSelfPort;
WORD wPeerPort;
WORD wParam1;
WORD wParam2;
BOOL far (*pFc)(ETHERNET_HEADER *, void *pPage, WORD wSize, WORD wParam);
};
#define SOCKET_STATE_EMPTY 0x0
#define SOCKET_STATE_SELFEXIST 0x1
#define SOCKET_STATE_PEEREXIST 0x2
#define SOCKET_STATE_PEERCLOSE 0x4
#define SOCKET_STATE_SELFCLOSE 0x8
#define SOCKET_STATE_SELFSYN 0x10
#define SOCKET_STATE_PEERSYN 0x20
#define SENDTCP_LOC (0L * 2L* 1024L * ETHERFIFO_TCP_SIZE)
#define RECVTCP_LOC (1L * 2L* 1024L * ETHERFIFO_TCP_SIZE)
//服务器最大的侦听数
#define MAX_SOCKETLISTEN_COUNT 5
//Socket句柄表缓冲最大个数
#define MAX_SOCKETTABLE_COUNT 5
struct timeval
{
long tv_sec;
long tv_usec;
};
//SOCKET句柄表的元素
struct SOCKET_HEADER
{
WORD hSocket; //句柄
BYTE byProtoent;//协议
IP_ADDRESS mIPRecvAddr; //接收方地址
WORD wRecvPort; //接收方端口
IP_ADDRESS mIPSendAddr; //发送方地址
WORD wSendPort; //发送方端口
BOOL bServer;
BOOL bActive;
int nListenCount;//作为服务器时的侦听数
int nIpFuncLoc;
DWORD dwSendSeqNO;//TCP发送者的序列号
DWORD dwSendAckNO;//TCP发送者的确认号
DWORD dwRecvSeqNO;//TCP接收者的序列号
DWORD dwRecvAckNO;//TCP接收者的确认号
BOOL bURG;//紧急标志URG
BOOL bACK;//确认标志ACK
BOOL bPSH;//压栈标志PSH
BOOL bRST;//重置标志RST
BOOL bSYN;//同步标志STN
BOOL bFIN;//结束标志FIN
BOOL bQuick;//指示是否立即发送到网卡
int nState;
CXmsMemory* pXmsMemory_Send;
CXmsMemory* pXmsMemory_Recv;
CFifo mSendFifo;
CFifo mRecvFifo;
int nErrorCode;
timeval mTimeVal;
};
void DisplaySocketString(char* pStr);
void DisplayEthernet(BYTE* pEthernet, int nDisplayStyle,BOOL bRecv);
//=====================================================================
BOOL __SendUdpPage(BYTE * pData, int nSize, IP_ADDRESS mIPRecvAddr,
WORD wRecvPort, WORD wSendPort, SOCKET hSocket = INVALID_SOCKET,
BOOL far (*pFc)(IP_HEADER *, void far*, SOCKET) = NULL);
BOOL __SendTcpPage(char* pData, int nSize, IP_ADDRESS mIPRecvAddr,
WORD wRecvPort, WORD wSendPort, DWORD dwSeqNO, DWORD dwAckNO,
BOOL bURG, BOOL bAck, BOOL bPSH, BOOL bRST, BOOL bSYN, BOOL bFin, BOOL bQuick,
SOCKET hSocket = INVALID_SOCKET,
BOOL far (*pFc)(IP_HEADER * pIp, void far* pPage, SOCKET hSocket) = NULL);
BOOL SendEthernet(BYTE* pData = NULL , int nData = 0);
BOOL ReceiveEthernet(ETHERNET_HEADER* pEthernetHeader, int nCx);
void InitIpPortFunction();
void UninitIpPortFunction();
BOOL RegisterIpFunc(BYTE byProtoent, IP_ADDRESS mSelfAddr,
WORD wSelfPort, IP_ADDRESS mPeerAddr, WORD wPeerPort,int* pnLoc,WORD wParam1,
WORD wParam2, BOOL far (*pFc)(ETHERNET_HEADER *, void far*, WORD,WORD));
void UnresisterIpFunc(int nLoc);
int FindIpFunc(BYTE byProtoent, IP_ADDRESS mSelfAddr, IP_ADDRESS mPeerAddr,
WORD wSelfPort, WORD wPeerPort, DWORD dwParam);
int GlobalMallocArpCache(WORD wType);
BOOL GlobalFreeArpCache(int nIndex);
BOOL FindArpCache(const IP_ADDRESS pIpAddress, ETHERNET_ADDRESS pEthernetAddr, int* pnLoc);
BOOL AddArpCache(const IP_ADDRESS pIpAddr, const ETHERNET_ADDRESS pEthernetAddr, WORD wType);
void __DoWithArpTimeOut();
//初始化SOCKET句柄表
void InitSocketTable();
void UninitSocketTable();
SOCKET MallocSocketTable();
void FreeSocketTable(SOCKET hSocket);
SOCKET_HEADER* GetSocketFromHandle(SOCKET hSocket);
void __SavePage_ToSocket(SOCKET_HEADER* pSocket, BYTE* pPage, WORD wSize);
void __RegisterPage_ToSocket(SOCKET_HEADER* pSocket, BYTE* pData, WORD wSize);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -