当前位置:首页 > 开发 > 互联网 > 正文

用setsockopt()来控制recv()与send()的超时

发表于: 2013-07-21   作者:aigo   来源:转载   浏览次数:
摘要: 原文: http://www.cppblog.com/jerryma/archive/2010/03/31/111169.html 在send(),recv()过程中有时由于网络状况等原因,收发不能预期进行,而设置收发超时控制: 在Linux下需要注意的是时间的控制结构是struct timeval而并不是某一整型数,以下是来自于网上一篇文章中的摘录,它是这样写的: int nNetTi
在send(),recv()过程中有时由于网络状况等原因,收发不能预期进行,而设置收发超时控制:
在Linux下需要注意的是时间的控制结构是struct timeval而并不是某一整型数,以下是来自于网上一篇文章中的摘录,它是这样写的:
int nNetTimeout=1000;//1秒,
//设置发送超时
setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int));
//设置接收超时
setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int));
这样做在Linux环境下是不会产生效果的须如下定义:struct timeval timeout = {3,0}; 
 
//设置发送超时
setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeout,sizeof(struct timeval));
//设置接收超时
setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(struct timeval));
有两点注意就是
1)recv ()的第四个参数需为MSG_WAITALL,在阻塞模式下不等到指定数目的数据不会返回,除非超时时间到。还要注意的是只要设置了接收超时,在没有MSG_WAITALL时也是有效的。说到底超时就是不让你的程序老在那儿等,到一定时间进行一次返回而已。
2)即使等待超时时间值未到,但对方已经关闭了socket, 则此时recv()会立即返回,并收到多少数据返回多少数据。

用setsockopt()来控制recv()与send()的超时

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Socket是一种通用的网络编程接口。 当调用函数socket时,成功后返回创建的套接字描述符。 说明:当调
本篇我们用一个测试机上的阻塞socket实例来说明主题。文章中所有图都是在测试系统上现截取的。 需要
本文引自百度文库 一、实验内容 1、采用MPI_Send 和MPI_Recv 编写代码来实现包括MPI_Bcast、MPI_All
首先声明: 只在 ie系列浏览器测试,在做网页布局时,用div布局时,层的自适应高度非常麻烦,今天写
先看实现效果吧! 这个问题,一听起来,感觉很容易,我当初也是这么认为的,但是在做的过程中,产生
自从在新闻频道看到 微软称Kinect将开启全新的人机对话时代 或取代键鼠 之后,很想体验一下玩体感游
功能:用下拉列表来控制交叉表的显示内容,主要控件是:值提示、提交按钮; 如上图,当选择订单笔数
用Android 手机来控制你的Canon EOS,同时又实现性了远距离遥控拍照功能,嗯,这就是Geek 教你在七
平时我们在写程序的时候很多情况下都会遇到任务超时处理的业务情况(比如说调用一个后台的api接口如
需求:通过更多按钮来实现搜索条件的收缩和展开。 以前没做过类似的需求,自己去京东等各大网站参考
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号