我的通讯程序的服务端是多线程的,在接收一定量的客户端连接请求后不能再与客户端建立连接。需要重新启动服务端,甚至电脑。
从网上查了一下,有些朋友说可能是资源没有释放,即socket连接没有释放,我看了一下程序,在线程结束前的finally中已经释放了资源:
closesocket(m_AcceptSocket);
m_AcceptSocket := INVALID_SOCKET;但是问题依旧存在,请高手指点一下,不胜感激!
从网上查了一下,有些朋友说可能是资源没有释放,即socket连接没有释放,我看了一下程序,在线程结束前的finally中已经释放了资源:
closesocket(m_AcceptSocket);
m_AcceptSocket := INVALID_SOCKET;但是问题依旧存在,请高手指点一下,不胜感激!
finally // 1
closesocket(m_AcceptSocket);
m_AcceptSocket := INVALID_SOCKET;
g_ItemSingleton.ManageSoeket.IsUse[m_Serial] := False;
g_ItemSingleton.ManageSoeket.IsStart[m_Serial] := False;
end; //1
finally // 0
CoUninitialize;
[code=INIFile]Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"MaxUserPort"=dword:0000fffe
"TcpTimedWaitDelay"=dword:00000005[/code]
我用的端口号是3001,
netstat -t 显示TCP协议的连接情况。
==========================================================
C:\Documents and Settings\Administrator>netstat -t
活动连接
协议 本地地址 外部地址 状态 卸载状态 TCP dqgjj-server-wi:1578 ABC:netbios-ssn ESTABLISHED 主栈中 TCP dqgjj-server-wi:3001 198.1.1.5:31748 CLOSE_WAIT 主栈中 TCP dqgjj-server-wi:3001 198.1.1.5:31787 CLOSE_WAIT 主栈中 TCP dqgjj-server-wi:3001 198.1.1.5:31804 CLOSE_WAIT 主栈中 TCP dqgjj-server-wi:3001 198.1.1.5:31824 CLOSE_WAIT 主栈中 TCP dqgjj-server-wi:3001 198.1.1.5:39268 CLOSE_WAIT 主栈中 TCP dqgjj-server-wi:ms-wbt-server YSICE:2141 ESTABLISHED
主栈中
TCP dqgjj-server-wi:ms-wbt-server MICROSOF-D6DCF5:2344 ESTABLISHED
主栈中
=================================================================
在程序中,监听端口为3001,socket等待连接队列的最大长度为5,如上所示:有5个连接还在等待关闭,并没有关闭。
是不是等待队列已经满了,并且不能释放这5个连接,所以拒绝接收新的请求,