超时失败

abzhang2 2008-03-28 11:58:03
设置套接字超时。
用select能够成功。
我现在想用setsockopt 去设置,不用select
int nTimeOutRecv;

/*socket 创建正确的,*/
.....
/*bind 成功*/
.....

nTimeOutRecv = 1000; /*操时想设置成1秒*/
nret = setsockopt(sock_udp_recv, SOL_SOCKET, SO_RCVTIMEO, (char*)&nTimeOutRecv, sizeof(nTimeOutRecv));

while(1)
{
/*不停的接受*/
nlendata = recvfrom(...);
/*处理*/
}

//////////////////
现在程序阻塞在recfrom()了。
我想让recvfrom()接收,超时1s.
是不是vxworks 不支持SO_RCVTIMEO哦。
...全文
201 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
abzhang2 2008-04-15
  • 打赏
  • 举报
回复
先谢谢了大家。。只有法用其他方法了
helenhf 2008-04-01
  • 打赏
  • 举报
回复
解释一下,楼上的楼上,那人的意思是调用recvfrom()是使用的udp协议不能用到超时,因为是无连接的
abzhang2 2008-03-31
  • 打赏
  • 举报
回复
还是没有解决。
自己来顶下。
abzhang2 2008-03-28
  • 打赏
  • 举报
回复
setsockopt()是成功了的
frank_zhou 2008-03-28
  • 打赏
  • 举报
回复
拜托,recvfrom()函数UDP的,而不是TCP的
lei1982zhang 2008-03-28
  • 打赏
  • 举报
回复
使用SO_KEEPALIVE选项,系统定时探测网络是否正常
setsockopt (clientSocket, SOL_SOCKET, SO_KEEPALIVE, (char *)&optval, sizeof (optval));
默认情况下系统两小时探测一次,并且8次探测失败的情况才认定该socket无效,
可以修改头文件tcp_timer.h配置小一点,具体配置项如下:
#define TCPTV_KEEP_INIT ( 75*PR_SLOWHZ) /* initial connect keep alive */
#define TCPTV_KEEP_IDLE (120*60*PR_SLOWHZ) /* dflt time before probing */
#define TCPTV_KEEPINTVL ( 75*PR_SLOWHZ) /* default probe interval */
#define TCPTV_KEEPCNT 8 /* max probes before drop */

2,179

社区成员

发帖
与我相关
我的任务
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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