使用TServerSocket控件,如何取得一个已经存在的连接的连接时间。

晓衡的成长日记 2006-12-07 04:45:29
在我做的一个网络通信程序中,TServerSocket控件使用了几天后,在ServerSocket->Socket->ActiveConnections中会残留很多未断开的连接,高达1000多,这个网络连通正常也就两三秒就完成了的。 我想当一个连接从Accept开始,超过3分钟,就强制把它断开,不知道有什么好方法。
...全文
235 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sbkopoky 2007-02-17
  • 打赏
  • 举报
回复
有一个香港和悦网络电话的源文件 ,有兴趣妨进入我的BLOG看看
  • 打赏
  • 举报
回复
我用了另一个方法。在Acccept时 用Socket->Data 指针保存此刻的时间:
DWORD NowTime = GetTickCount();
DWORD *dwBegin = new DWORD;
memcpy(dwBegin,&NowTime ,sizeof(NowTime));
Socket->Data = dwBegin;

然后在一个timer中每隔一定时间检查连接时间超过3分钟就强制断开。
pp616 2006-12-08
  • 打赏
  • 举报
回复
setsockopt是设置socket的。详细信息你可以看msdn
  • 打赏
  • 举报
回复
谢谢pp616, 我对getsockopt的功能和用法不太了解, 我发现还有一个setsockopt,为什么这里不用set呢?
pp616 2006-12-08
  • 打赏
  • 举报
回复
用getsockopt可以得到
例:
#include <winsocket2.h>
#include <Mswsock.h>
//得到ServerSocket1的一个连接的连接时间 单位为秒
int sec,len,ret;
SOCKET s=(SOCKET)ServerSocket1->Socket->Connections[0]->SocketHandle;
len=sizeof(int);
ret=::getsockopt(s,SOL_SOCKET, SO_CONNECT_TIME,(char *)&sec,&len);
if(!ret)
{
//sec里就是已连接的秒数
}

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧