socket为send和recv设置超时时间

linux和windows下用setsockopt设置SO_SNDTIMEO,SO_RCVTIMEO的参数的一点区别  

 

UDP的socket在某些情况:如对方关闭时,本地可能sendto不出去数据,然后recvfrom就会被阻塞,这时就需要设置 这两个参数的值提高程序质量。

linux:

    struct timeval timeout={3,0};//3s
    int ret=setsockopt(sock_fd,SOL_SOCKET,SO_SNDTIMEO,(const char*)&timeout,sizeof(timeout));
    int ret=setsockopt(sock_fd,SOL_SOCKET,SO_RCVTIMEO,(const char*)&timeout,sizeof(timeout));

    如果ret==0 则为成功,-1为失败,这时可以查看errno来判断失败原因
    int recvd=recv(sock_fd,buf,1024,0);
    if(recvd==-1&&errno==EAGAIN)
   {
        printf("timeout\n");
   }

windows:
int timeout = 3000; //3s
   int ret=setsockopt(sock_fd,SOL_SOCKET,SO_SNDTIMEO,&timeout,sizeof(timeout));

   int ret=setsockopt(sock_fd,SOL_SOCKET,SO_RCVTIMEO,&timeout,sizeof(timeout));

 

而solaris,则不支持。

时间: 2024-12-30 22:53:24

socket为send和recv设置超时时间的相关文章

android-安卓socket设置超时时间不管用是为何?

问题描述 安卓socket设置超时时间不管用是为何? 解决方案 Socket 设置连接超时时间Socket 关于设置Socket连接超时时间Socket 关于设置Socket连接超时时间 解决方案二: synchronized void setSoTimeout(int timeout) Sets this socket's read timeout in milliseconds. 200是 0.2秒 这个方法是这是读取超时 解决方案三: timeout的时间单位是毫秒

C++设置超时时间的简单实现方法_C 语言

本文实例讲述了C++设置超时时间的简单实现方法,代码简单易懂,功能实用.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: BOOL SetTimeOut(SOCKET s, int nTime, BOOL bRecv)  {      int ret = ::setsockopt(s, SOL_SOCKET, bRecv?SO_RCVTIMEO:SO_SNDTIMEO, (char*)nTime, sizeof(nTime));      return ret!=SOCKET_ER

web service-求助:spring webservicetemplate访问webservice怎么设置超时时间?

问题描述 求助:spring webservicetemplate访问webservice怎么设置超时时间? 客户端使用webservicetemplate访问,调用marshalSendAndReceive(String uri, Object requestPayload, WebServiceMessageCallbak requestCallback)方法,怎么样设置超时时间? 解决方案 CXF-WebService设置超时时间 解决方案二: 使用CommonsHttpMessageSe

httpclient-关于HttpClient设置超时时间无效的问题

问题描述 关于HttpClient设置超时时间无效的问题 超时时间设置60S 超时时间设置5S 可以看到,当把超时时间设置为60S时,依然在21S左右超时,只有当超时时间在21S以下时,才生效.这是什么原因? public class Send_Class { public static int MAX_CONNECTION_PERROUTE = 1;//最大连接数 public static int SOCKET_TIMEOUT = 60000;//超时时间 public static voi

PHP请求远程地址设置超时时间的解决方法_php技巧

php请求远程地址设置超时时间,主要讲解file_get_contents.fopen.curl这三个简单常用函数设置超时时间的方法,一般情况下建议使用curl,性能最好,效率也最高. 1.file_get_contents 请求超时设置 $timeout = array( 'http'=> array( 'timeout'=>5//设置一个超时时间,单位为秒 ) ); $ctx = stream_context_create($timeout); $text = file_get_conte

server-netty 未到心跳设置超时时间自动清除通道

问题描述 netty 未到心跳设置超时时间自动清除通道 项目中使用netty,设置了读写和心跳的超时时间为10分钟.但是我关闭某个客户端后, 经常未满10分钟就关闭了通道. 我自己的想法:会否是内存不足,JVM自动回收了.项目暂时架构在WIn2008 Server中, 单台的连接数暂时未1000度,JVM内存被分配了3G.希望大神帮忙分析下 解决方案 oracle设置超时时间可以设置命令执行的超时时间的脚本

调用webservice 设置超时时间

前段时间自己写了个程序,调用webservice,今天早上一执行,速度是相当的慢,一开始以为是程序的问题,后来跟踪一看,原来是调用webservice出现问题,放置webservice的服务器关掉了,导致程序访问速度慢,这样我们就要将webservice设置超时时间.如下   WebService超时设置 1. 服务器端设置超时 在 web.config 的 system.web 里添加如下配置项: < httpRuntime executionTimeout="30" />

C# UdpClient 设置超时时间

/********************************************************************** * C# UdpClient 设置超时时间 * 说明: * 网络通信中设置超时时间是常有的时,记录UDP获取.发送超时设置方法. * * 2016-12-8 深圳 南山平山村 曾剑锋 *********************************************************************/ 一.参考文档: 1. Can

Python中为feedparser设置超时时间避免堵塞_python

python有一个用于解析feed的模块:feedparser,feedparser解析各种feed是非常方便的,唯一比较恼火的是遇到一些badurl,经常会导致堵塞,因此需要为feedparser设置一个超时时间. 可是feedparser并没有提供这个功能,只好采用其他方法了,具体办法请参看feedparser项目的issue221. 其实也很简单,按照上面文档的说明 developers have had the ability to set a global timeout for ov