F
flai
Unregistered / Unconfirmed
GUEST, unregistred user!
写了一个socket程序,在win2k下运行正常,但是在win98下发生了这样的异常:
客户端将请求发给服务端,服务端收到了请求,并将应答发给了客户端,但是
客户端收不到给应答,直至超时出错。
这种异常只发生在客户端有多个连续请求时,并且第一个请求从不出错,
在command prompt下运行netstat命令,发现最后一个连接处于 CLOSE_WAIT 状态,
请问这是为什么?
查相关资料:CLOSE_WAIT说明远程套接字已经关闭,正在等待关闭这个套接字
是不是说明server端在发送完应答后立即关闭套接字,而client端还来不及接收?
(注意:W2K,XP下从不出现这样的情况)
文件1ListenSock.cpp
int CListenSock::SetWaitingForAccept()
{
SOCKET sock;
for(;
{
if(sock=accept(m_hSocket,NULL,NULL))
{
printf("accept socket number %d/n",sock);
................
Afxbegin
Thread(Worker,(LPVOID)&ps);
}
}
}
UINT Worker(LPVOID lparam)
{
////////////////////////////////
char strRequest[PACKET_LEN+1],strReturn[PACKET_LEN+1];
memset(strRequest,'/0',sizeof(strRequest));
memset(strReturn,'/0',sizeof(strReturn));
CDataSocket* dSocket=new CDataSocket(((stPoolSock*)lparam)->sock,true,true,60);
dSocket->Receive(strRequest);
....................
....................
dSocket->Send(strReturn);
delete dSocket;
return 0;
}
文件2 DataSocket.cpp
CDataSocket::~CDataSocket()
{
printf("close socket %d/n/n/n",m_hSocket);
closesocket(m_hSocket);
}
客户端将请求发给服务端,服务端收到了请求,并将应答发给了客户端,但是
客户端收不到给应答,直至超时出错。
这种异常只发生在客户端有多个连续请求时,并且第一个请求从不出错,
在command prompt下运行netstat命令,发现最后一个连接处于 CLOSE_WAIT 状态,
请问这是为什么?
查相关资料:CLOSE_WAIT说明远程套接字已经关闭,正在等待关闭这个套接字
是不是说明server端在发送完应答后立即关闭套接字,而client端还来不及接收?
(注意:W2K,XP下从不出现这样的情况)
文件1ListenSock.cpp
int CListenSock::SetWaitingForAccept()
{
SOCKET sock;
for(;
{
if(sock=accept(m_hSocket,NULL,NULL))
{
printf("accept socket number %d/n",sock);
................
Afxbegin
Thread(Worker,(LPVOID)&ps);
}
}
}
UINT Worker(LPVOID lparam)
{
////////////////////////////////
char strRequest[PACKET_LEN+1],strReturn[PACKET_LEN+1];
memset(strRequest,'/0',sizeof(strRequest));
memset(strReturn,'/0',sizeof(strReturn));
CDataSocket* dSocket=new CDataSocket(((stPoolSock*)lparam)->sock,true,true,60);
dSocket->Receive(strRequest);
....................
....................
dSocket->Send(strReturn);
delete dSocket;
return 0;
}
文件2 DataSocket.cpp
CDataSocket::~CDataSocket()
{
printf("close socket %d/n/n/n",m_hSocket);
closesocket(m_hSocket);
}