文档章节

Linux 中连接超时的另外一种实现

sincoder
 sincoder
发布于 2014/10/24 15:33
字数 167
阅读 100
收藏 9

我之前的实现方式都是使用非阻塞的socket  , 其实对于阻塞的socket 有另外一种实现方式,那就是使用 alarm(闹钟)  , 进入连接前设置设置个超时

voidset_timeout(int n)
{
to = 0;
alarm(n);
signal(SIGALRM, timeout);
}

然后进入连接,

y = connect(sock, (struct sockaddr *) &cli, sizeof(cli));

如果超时了,进程就会收到 SIGALRM 信号,程序的流程走到 SIGALRM 的信号处理函数 timeout 中

voidtimeout(int n)
{
to = 1;
alarm(0);
}

此时 connect 函数会被信号打断退出  此时判断下 to 变量 就知道是不是超时了 

if (to) {
printe("connect: Timed out\n");
continue;
}



© 著作权归作者所有

上一篇: upx防解压
sincoder

sincoder

粉丝 36
博文 402
码字总数 126660
作品 1
深圳
私信 提问
JAVA SOCKET connect超时设置是如何实现的?

JAVA SOCKET编程中 SOCKET中connect方法是可以设置连接超时时间的,如下: java.net.Socketpublic void connect(SocketAddress endpoint, int timeout) throws IOException 注:timeout为0表......

智深
2012/11/28
0
2
Go 语言使用 TCP keepalive

如果你写过某些 TCP socket 代码,你可能会疑问:如果网线被拨掉或者远程主机崩溃了我的TCP连接会怎样? 简短的答案是:一点影响都没有。这种情况下连接的结束远程主机是不会发送FIN数据包的...

oschina
2014/08/27
11.3K
12
tcp是一个复杂的协议

tcp是一个很复杂的协议,这是每个人都知道的,但是它是很重要的,超过半数的公司在应届生面试时会提供tcp三次握手的面试题,我当年就碰到了N次,只可惜我对网络比较了解,这件事几乎没有给我...

晨曦之光
2012/04/10
126
0
非阻塞connect对于select时应注意的问题

对于面向连接的socket类型(SOCKSTREAM,SOCKSEQPACKET)在读写数据之前必须建立连接。 首先服务器端socket必须在一个客户端知道的地址进行监听,也就是创建socket之后必须调用bind绑定到一个指定...

地狱的烈火
2013/02/22
0
0
goroutine退出方式的总结

goroutine的退出机制 大家都知道goroutine是Go语言并发的利器,通过goroutine我们可以很容易的编写高并发的程序。但是goroutine设计的退出机制是由goroutine自己退出,不能在外部强制结束一个...

mickelfeng
2018/10/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

任正非对华为热点问题的回应亮了,终于知道华为为什么能扛过这一次的冲击!

任正非对华为热点问题的回应亮了,终于知道华为为什么能扛过这一次的冲击! 如果你是华为的老板,看到一条传遍网络的“美国封锁华为”、“华为禁令”的消息,你会怎么办? 昨天上午,华为创始...

forespider
43分钟前
1
0
Java HTTP 组件库选型看这篇就够了

最近项目需要使用 Java 重度调用 HTTP API 接口,于是想着封装一个团队公用的 HTTP client lib. 这个库需要支持以下特性: 连接池管理,包括连接创建和超时、空闲连接数控制、每个 host 的连...

Java面经
44分钟前
2
0
nginx 重启

在 nginx.config 配置目录下 输入命令: nginx -s reload 在 nginx 中,如果我修改了一个配置文件,或者新增了一个配置文件。按照群里网友的描述,我需要关闭 nginx,或者重启 nginx,比较麻...

MrBoyce
45分钟前
0
0
Cesium中级5 - Terrain 地形

Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ CesiumJS支持对与水流相关的海洋、湖泊和河流以及全球高分辨率地形进行流式处理和可视化。查看山峰、山谷...

Cesium中文网
57分钟前
0
0
搭建jupyter+nginx服务

Tips:该文章面向Mac和centos用户,如果是Windows用户,请先安装虚拟机。 概述 Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 Jupyter ...

阿dai学长
59分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部