socket编程出现点小疑点,求帮助

socket编程出现点小问题,求帮助!
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <iostream>
int main()
{
WORD version(0);
WSADATA wsadata;
int socket_return(0);
version = MAKEWORD(2,0);
socket_return = WSAStartup(version,&wsadata);
if (socket_return != 0)
{
return 0;
}
SOCKET server_sock = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN server_addr;
server_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(5204);
int len = sizeof(SOCKADDR);
socket_return = bind(server_sock, (SOCKADDR*)&server_addr, len);
listen(server_sock, 5);
std::cout<<"--------------------------服务器已开启----------------------------"<<std::endl;
SOCKET cilent_sock;
SOCKADDR_IN cilent_addr; 
while(1)
{
cilent_sock = accept(server_sock, (SOCKADDR*)&cilent_addr, &len);
socket_return = WSAGetLastError();
if (socket_return != 0)
{
std::cout<<"连接错误,错误代码为:"<<socket_return<<"\n按任意键退出"<<std::endl;
getchar();
return 0;
}
if ( (cilent_sock != NULL) && (cilent_sock != -1) )
{
char send_buff[50] ={0};
ZeroMemory(send_buff, 50);
sprintf_s(send_buff, "连接成功\n");
send(cilent_sock, send_buff, strlen(send_buff)+1, 0);
  while(1)
  {
char recv_buff[50];
ZeroMemory(recv_buff, 50);
len = recv(cilent_sock,recv_buff, 50, 0);
if (len == -1)
{
std::cout<<"客户端已断开"<<std::endl;
closesocket(cilent_sock);
break;
}
std::cout<<"客户端:"<<recv_buff<<std::endl;
sprintf_s(send_buff, "发送成功");
send(cilent_sock, send_buff, strlen(send_buff)+1, 0);
}
}
}
return 1;
}

上面这段是服务器的代码, 第一次启动客户端可以正常连接并且通信. 但当我把客户端关闭,再次打开的时候,accept就不能正常工作了,提示错误为10014! 
------解决方案--------------------
while(1)
{
    len = sizeof(SOCKADDR_IN);
    cilent_sock = accept(server_sock, (SOCKADDR*)&cilent_addr, &len);
    ...
}