UINT StartServer(VOID * pPARAM)
{
WSADATA wsaData;
struct sockaddr_in local;

struct    sockaddr_in from; 
int fromlen;//fromlen=sizeof(from); struct sizeof 字节 对齐


if(::WSAStartup(0x202,&wsaData)!=0)
{
printf("\nError in Startup session.\n");
WSACleanup();
return -1;
}

local.sin_family=AF_INET;
local.sin_addr.s_addr=inet_addr ("");
local.sin_port=htons(PROXYPORT);   //80

gListen_Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  //0);  //tcp 
if(gListen_Socket==INVALID_SOCKET)
{
printf("\nError in New a Socket.");
WSACleanup();
return -2;
}

// 接收缓冲区
int nRecvBuf=BUFSIZE;//设置为32K
setsockopt(gListen_Socket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
//发送缓冲区
int nSendBuf=BUFSIZE;//设置BUFSIZ
setsockopt(gListen_Socket,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));
if(::bind(gListen_Socket,(sockaddr *)&local,sizeof(local))!=0)  //邦定地址
{
printf("\n Error in Binding socket.");
WSACleanup();
return -3;
};

if(::listen(gListen_Socket,10)!=0) //监听 SOMAXCONN
{
printf("\n Error in Listen."); 
WSACleanup(); 
return -4;
}

//----//接收连接------------------------------------------------------------
char straddress[16];
int  cport=0;
CWinThread *pChildThread=NULL;
SOCKET msg_socket=INVALID_SOCKET;
while(1)
{
fromlen=sizeof(from);//fromlen=sizeof(from); struct sizeof 字节 对齐每次都被清0
msg_socket=::accept(gListen_Socket,(struct sockaddr *)&from,&fromlen);
if( msg_socket==INVALID_SOCKET)
{ // 10038 WSAENOTSOCK WSHSetSocketInformation SOL_INTERNAL
printf( "\n StartServer Error  in accept err id: %d \n",WSAGetLastError());
continue;
}

//----解析地址
strcpy(straddress,inet_ntoa( from.sin_addr ));
//cport= ntohs(from.sin_port) ;
//printf("\n---------- socket id: %d client ip: %s port:%d -------\n",msg_socket,straddress,cport);
if(strcmp(straddress,"")==0)
{
closesocket(msg_socket);
continue;
}

struct SocketPair * pSPair=(struct SocketPair *)malloc(sizeof(SocketPair));
if(pSPair==NULL)
{
printf("\nstartserver() malloc socketpair error\n");
closesocket(msg_socket);
continue;
}
pSPair->IsUser_ProxyClosed=FALSE;
pSPair->IsProxy_ServerClosed=TRUE;
pSPair->user_proxy=msg_socket;
pSPair->proxy_server = INVALID_SOCKET;

pChildThread=NULL;
pChildThread = AfxBeginThread(UserToProxyThread,(LPVOID)pSPair,THREAD_PRIORITY_NORMAL,0,0, NULL );
if(pChildThread==NULL)
{
printf( "\n StartServer Error  in AfxBeginThread \n");
closesocket(msg_socket);
if(pSPair) free(pSPair);
continue;
}

}//while
}int CloseServer()
{
closesocket(gListen_Socket); //关闭监听端口
WSACleanup();
return 1;
}