关于网络编程,怎么设置连接超时值?

Magic丶旭 2015-08-05 06:27:02
TCP协议,怎么设置连接的超时值?
...全文
189 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chmuggmwtg 2015-08-06
  • 打赏
  • 举报
回复
我有点疑问。为什么要修改TCP的超时时间?TCP的三次握手本身就有定时器。这个新加的超时时间,是不是应用层,用来重发连接请求用的?如果是这个作用,这个间隔固定为20秒,有点不合理。书上说,冲突避让,采用指数增长比较好,有没有人这么做过?
  • 打赏
  • 举报
回复
超时这个得看你是哪一端 如果你是client,你就通过问答一次有无返回数据就知道了,比如1s不返回,你就断了socket然后重连 如果你是server你不用操心,client不连你,你就不用管,或者你加个定时器,多久不向我发数据,我就断开连接
Magic丶旭 2015-08-06
  • 打赏
  • 举报
回复
除了select还有别的方式吗?
老王爱上猫 2015-08-06
  • 打赏
  • 举报
回复
就是楼上说的..
Magic丶旭 2015-08-06
  • 打赏
  • 举报
回复
如果我想一个Client程序在发起连接之后,3秒内如果没有连接成功的话就提示一下应该怎么做?
蒙飞鸿 2015-08-05
  • 打赏
  • 举报
回复
2.select方法
http://www.ycgczj.com.cn/34733.html
原理上是这样的:
1.建立socket
2.将该socket设置为非阻塞模式
3.调用connect()
4.使用select()检查该socket描述符是否可写(注意,是可写)
5.根据select()返回的结果判断connect()结果
6.将socket设置为阻塞模式(如果你的程序不需要用阻塞模式的,这步就省了,不过一般情况下都是用阻塞模式的,这样也容易管理)
如果你对网络编程很熟悉的话,其实我一说出这个过程你就知道怎么写你的程序了,下面给出我写的一段程序,仅供参考。
/******************************
* Time out for connect()
* Write by Kerl W
******************************/
#include <sys/socket.h>
#include <sys/types.h>
#define TIME_OUT_TIME 20 //connect超时时间20秒
int main(int argc , char **argv)
{
………………
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd < 0) exit(1);
struct sockaddr_in serv_addr;
………//以服务器地址填充结构serv_addr
int error=-1, len;
len = sizeof(int);
timeval tm;
fd_set set;
unsigned long ul = 1;
ioctl(sockfd, FIONBIO, &ul); //设置为非阻塞模式
bool ret = false;
if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1)
{
tm.tv_set = TIME_OUT_TIME;
tm.tv_uset = 0;
FD_ZERO(&set);
FD_SET(sockfd, &set);
if( select(sockfd+1, NULL, &set, NULL, &tm) > 0)
{
getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, (socklen_t *)&len);
if(error == 0) ret = true;
else ret = false;
} else ret = false;
}
else ret = true;
ul = 0;
ioctl(sockfd, FIONBIO, &ul); //设置为阻塞模式
if(!ret)
{
close( sockfd );
fprintf(stderr , "Cannot Connect the server!n");
return;
}
fprintf( stderr , "Connected!n");
//下面还可以进行发包收包操作
……………
}

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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