社区
系统维护与使用区
帖子详情
问connect系统调用能否显式设置超时(Solaris平台)
Mr.Osc
2002-09-25 11:39:56
当socket工作在阻塞模式时,如果目标地址存在问题,connect就会阻塞,能否通过函数或是系统调用显式设置这个超时时间,请各位指教。
...全文
78
8
打赏
收藏
微信扫一扫
点击复制链接
分享
下载分享明细
分享
举报
写回复
8 条
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Mr.Osc
2002-09-27
To:13312933476(南国浪子)
嗯,select确实无法判断,我后来为了解决这个问题采用了一种比较笨拙的方法,当select返回的时候,是可以判断IP地址是无法获得的,但是就存在两种情况,一种是完全正确,一种是端口错误,这时再次调用connect就会得到正确的errno,我虽然测试,但并没有从理论上进行验证。
如果大家没有更好的建议就结帖了。
打赏
举报
回复
赞
solar
2002-09-25
setsockopt can not set timeout on most of unix platform including solaris
打赏
举报
回复
赞
13312933476
2002-09-25
select函数的超时功能其实就是起一个定时器的作用!!!
当connect阻塞时,在其定时内connect如果没有返回,select函数就将中断其阻塞.至于当"目的ip地址正确但目标端口不正确"的情况,的确select是不能判断的!!!
打赏
举报
回复
赞
Mr.Osc
2002-09-25
各位推荐我用setsockopt的兄弟,我知道setsockopt可以设置发送超时和接收超时,但对于connect系统调用使用那个参数我确实不知道,请知道的兄弟不吝赐教。
To:13312933476(南国浪子)
谢谢浪子兄,关于你说的信号控制的方法我知道是可行的,在这里我说说我的解决方案,大家讨论一下是否可行,我选用非阻塞的socket连接,一般情况下返回-1并设置errno为EINPROGRESS,然后通过select函数监测该描述符,因为select函数可以方便地设置超时时间,但是有一种情况select也是返回的,就是当目的ip地址正确但目标端口不正确(没有监听)的时候select函数好像是不能判断,我现在只能判断到这一步。还请指教。
打赏
举报
回复
赞
mr_fanwei
2002-09-25
推荐setsockopt()。
我用过,很管用的一个函数!
打赏
举报
回复
赞
13312933476
2002-09-25
alarm(5)中改为:TIME_OUT .
打赏
举报
回复
赞
13312933476
2002-09-25
可以!!!!
先设置:
#define TIME_OUT 你需要的超时时间
再写一个超时函数如下:
void Timeout(int sig)
{
signal(sig,SIG_IGN);
longjmp(TimeoutEnv,1);
}
接着:
if (setjmp(TimeoutEnv) == 0)
{
signal(SIGALRM,Timeout);
alarm(5);
if(connect(...................)<0)
你就可以结局超时阻塞!!!!
然后:
打赏
举报
回复
赞
DANIELIU
2002-09-25
应该可以,试试setsockopt()和getsockopt(),用法可以man一下。
打赏
举报
回复
赞
相关推荐
python socket
connect
超时
_如何
设置
socket的
Connect
超时
而非阻塞
调用
只要不能立即完成就会返回错误,所以这里会返回EINPROGRESS,表示在建立连接但还没有完成。3.在读套接口描述符集(fd_set rset)和写套接口描述符集(fd_setwset)中将当前套接口置位(用FD_ZERO()、F...
java socket
超时
编程_JAVA SOCKET
connect
超时
设置
是如何实现的?
JAVA SOCKET编程中 SOCKET中
connect
方法是可以
设置
连接
超时
时间的,如下:java.net.Socketpublic void
connect
(SocketAddress endpoint, int timeout) throws IOException注:timeout为0表示不限
超时
connect
调用
会...
php socket read
超时
,[转]socket
超时
设置
详解(
connect
/read/write)
基本概念(摘自:《unix网络编程》卷114.2 套接字
超时
)在涉及套接字的I/O操作上
设置
超时
的方法有以下三种(1)
调用
alarm,它在指定
超时
期满时产生SIGALARM。这个方法涉及信号处理,而信号处理在不同的实现上存在差异,...
六、TCP C/S:Linux
connect
超时
设置
当在一个非阻塞的 TCP 套接字上
调用
connect
时,
connect
将立即返回一个 EINPROGRESS 错误,不过已发起的 TCP 三次握手继续进行。接着使用 select 检测这个连接或成功或失败的已建立条件。 1. 程序源码 #...
socket
超时
设置
详解(
connect
/read/write)
在涉及套接字的I/O操作上
设置
超时
的方法有以下三种 (1)
调用
alarm,它在指定
超时
期满时产生SIGALARM。这个方法涉及信号处理,而信号处理在不同的实现上存在差异,而且可能干扰进程中现有的alarm
调用
。 (2)在select中...
发帖
系统维护与使用区
加入
微信扫一扫
点击复制链接
分享社区
下载分享明细
1.9w+
社区成员
7.4w+
社区内容
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
申请成为版主
帖子事件
创建了帖子
2002-09-25 11:39
社区公告
暂无公告