如何定义监听听时间?

TurtleRock 2006-07-31 06:20:37
使用Listen开始监听,如果30分钟内没有连接,则自动断开侦听,怎么办?
要求不能用Timer等来控制,最好Listen的线程内,自己来控制,不知道有没有办法?

If (Listen(Sock, SOMAXCONN) <> 0) Then Goto Disconnected;

Len := SizeOf(Rem);
Sock := Accept(Sock, @Rem, @Len);
...全文
233 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
13661023811 2006-08-03
  • 打赏
  • 举报
回复
哈哈,你执行一下就知道了,是可以的,
你说的:
我是说Listen(Sock, SOMAXCONN)正常,
开始Accept(Sock, @Rem, @Len);了,
但是这时一起会等待连接,如果一直没有连接,那么会一直在Accept这儿,《---用select定义超时啊,我在上面有了,仔细看看吧,哎,我一片苦心啊....
TurtleRock 2006-08-01
  • 打赏
  • 举报
回复
我是说Listen(Sock, SOMAXCONN)正常,
开始Accept(Sock, @Rem, @Len);了,
但是这时一起会等待连接,如果一直没有连接,那么会一直在Accept这儿,
我想如果30分钟没有人来连接,就自动断开。
上面的程序好象不能实现这个功能,因为我的程序一来就会执行到你说的
SOCKET m_AcceptSocket1=accept(Sock,...;
这里了,这时没有人连接,就会一直accept下去
13661023811 2006-08-01
  • 打赏
  • 举报
回复
你是说这样吗?
if(listen(Sock,SOMAXCONN))
{
错误处理函数;
}
FD_ZERO(&FDS);
FD_SET(Sock,&FDS);
struct timeval timeout;
timeout.tv_sec=0;
timeout.tv_usec=10000;
int r=0;
long starttime,endtime;
starttime = GetTickCount();
while(!Terminated)
{
memset(&FDS, 0, sizeof(struct fd_set));
FD_ZERO(&FDS);

if(!FD_ISSET(Sock,&FDS)) FD_SET(Sock,&FDS);
r=select(Sock+1,&FDS,0,0,&timeout);

if(r<= 0)//超时 //意外
{
if(Terminated ) return;
endtime= GetTickCount();
if(startime-endtime>1800000)return;
}
else
{
SOCKET m_AcceptSocket1=accept(Sock,...;
starttime= GetTickCount();

1,317

社区成员

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

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