社区
系统维护与使用区
帖子详情
问connect系统调用能否显式设置超时(Solaris平台)
Mr.Osc
2002-09-25 11:39:56
当socket工作在阻塞模式时,如果目标地址存在问题,connect就会阻塞,能否通过函数或是系统调用显式设置这个超时时间,请各位指教。
...全文
112
8
打赏
收藏
问connect系统调用能否显式设置超时(Solaris平台)
当socket工作在阻塞模式时,如果目标地址存在问题,connect就会阻塞,能否通过函数或是系统调用显式设置这个超时时间,请各位指教。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
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一下。
运行于
solaris
平台
下的Socket连接
Socket编程中,必须处理各种错误,如EINTR(中断
系统
调用
)、ECONNREFUSED(连接被拒绝)、EHOSTUNREACH(主机不可达)等。使用`perror()`或`strerror()`获取错误信息。 10. **套接字选项**: `setsockopt()`和`...
Oracle
Solaris
9 - man pages section 3: Networking Library Funct
在
Solaris
操作
系统
中,man pages 是一组文档,每部分都专注于不同类型的命令、函数或
系统
调用
。section 3 特别关注的是 C 库函数,特别是那些与网络编程相关的函数。 在 Oracle
Solaris
9 中,网络库函数提供了...
Fast Portable non-blocking network programming with Libevent
在了解本书的内容之前,需要具备一些基础的C语言知识以及C语言网络编程基础,如socket()、
connect
()等基本网络
调用
。书中假设读者已经对这些概念有所了解。 关于本书内容的版权信息,书籍的部分内容和源代码示例...
C事件驱动循环的网络IO编程框架源代码.rar
这些事件可以是网络连接的建立、数据的读写、
超时
以及其他
系统
事件。当事件发生时,事件驱动框架会
调用
相应的回调函数来处理这些事件,而不是直接阻塞等待。 在C语言中,实现事件驱动循环通常会涉及以下几个关键...
测试培训教材
6、修改IP地址后不能登录QC 解决办法: 在C:\Program Files\Mercury\Quality Center\jboss\server\default\deploy目录下找到10sabin.war 进入10sabin.war\WEB-INF,修改siteadmin.xml中的IP地址: 修改数据库中的...
系统维护与使用区
19,619
社区成员
74,587
社区内容
发帖
与我相关
我的任务
系统维护与使用区
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
复制链接
扫一扫
分享
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章