这是使用重叠io做的客户端,
但是当服务器当掉后
程序会在接收上产生错误,我怎么样在这时让程序和服务器自动重新连接呢????#include <winsock2.h>
#include <windows.h>
#include <stdio.h>#pragma comment (lib,"ws2_32.lib")
#define PORT 8888
#define DATA_BUFSIZE 8192void main(void)
{
WSADATA wsaData;
SOCKET ConnectSocket;
SOCKADDR_IN Remote;

INT Ret;


if ((Ret = WSAStartup(0x0202,&wsaData)) != 0)
{
printf("WSAStartup failed with error %d\n", Ret);
WSACleanup();
return;
}

if ((ConnectSocket = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, 
WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET) 
{
printf("Failed to get a socket %d\n", WSAGetLastError());
return;
}

memset(&Remote, 0, sizeof(Remote));

Remote.sin_family = AF_INET;
Remote.sin_addr.s_addr = inet_addr("92.0.0.27");
Remote.sin_port = htons(PORT);


WSAConnect(ConnectSocket,(sockaddr*)&Remote,sizeof(Remote),0,NULL,0,0);

WSAOVERLAPPED ol;
ZeroMemory(&ol,sizeof(ol));

WSAEVENT ev = WSACreateEvent();
ol.hEvent = ev;

char buf[DATA_BUFSIZE];
WSABUF wsaBuf;

DWORD nRecved;
DWORD flags;  

memset(buf,0, DATA_BUFSIZE);
wsaBuf.len = DATA_BUFSIZE;
wsaBuf.buf = buf;
flags = 0;
nRecved = 0;

int i = 0;
while(1)
{     
memset(buf,0, DATA_BUFSIZE);
wsaBuf.len = DATA_BUFSIZE;
wsaBuf.buf = buf;
flags = 0;
nRecved = 0;
if(WSARecv(ConnectSocket, &wsaBuf, 1, &nRecved, &flags, &ol, NULL) == SOCKET_ERROR)
{
if(WSAGetLastError() != WSA_IO_PENDING)
{
printf("3333333WSARECV error, %d\n", WSAGetLastError());
}
}

else if(nRecved == 0)
{
printf("server closed\n");
}
    DWORD index = WSAWaitForMultipleEvents(1,&ev,FALSE,3000, FALSE);

if(index != 0)
{
printf("waitForEvent error\n");
}
else
{
WSAResetEvent(ev);

if(!WSAGetOverlappedResult(ConnectSocket, &ol, &nRecved, TRUE, &flags) )
{
printf( "get Over lap result error\n");
}
else
{
printf("%s, %d\n",wsaBuf.buf, i++);
}
}
}


WSACloseEvent(&ev);
closesocket(ConnectSocket);
WSACleanup();
}