版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SwordArcher/article/details/83417950
结构体、数组等初始化,ZeroMemory、memset
1.memset的初始化:
typedef struct s1
{
SOCKET m_Socket;
SOCKADDR_IN m_ClientAddr;
//初始化
s1()
{
m_Socket = INVALID_SOCKET;
//SOCKADDR_IN本身也是个结构体可以使用memset方法初始化
memset(&m_ClientAddr, 0, sizeof(m_ClientAddr));
}
};
struct Stu
{
int nNum;
bool bSex;
char szName[20];
char szEmail[100];
//这样初始化也可以
Stu()
{
memset(this, 0, sizeof(Stu));
//或者下面的格式
//memset(&nNum, 0, sizeof(Stu));
}
};
2.ZeroMemory的初始化
typedef struct _PER_IO_CONTEXT
{
OVERLAPPED m_Overlapped; //每一个重叠网络操作的重叠结构(针对每一个Socket的每一个操作,都要有一个)
SOCKET m_sockAccept; //这个网络操作所使用的Socket
WSABUF m_wsaBuf; //WSA类型的缓冲区,用于给重叠操作传参数
char m_szBuffer[MAX_BUFFER_LEN]; //WSABUF里具体存字符的缓冲区
OPERATION_TYPE m_OpType; //标识网络操作的类型
//初始化
_PER_IO_CONTEXT()
{
ZeroMemory(&m_Overlapped, sizeof(m_Overlapped));
ZeroMemory(m_szBuffer, MAX_BUFFER_LEN);
m_sockAccept = INVALID_SOCKET;
m_wsaBuf.buf = m_szBuffer;
m_wsaBuf.len = MAX_BUFFER_LEN;
m_OpType = NULL_POSTED;
}
//释放掉Socket
~_PER_IO_CONTEXT()
{
if (m_sockAccept != INVALID_SOCKET)
{
closesocket(m_sockAccept);
m_sockAccept = INVALID_SOCKET;
}
}
//重置缓冲区内容
void ResetBuffer()
{
ZeroMemory(m_szBuffer, MAX_BUFFER_LEN);
}
}PER_IO_CONTEXT,*PPER_IO_CONTEXT;