socket C编程设置接收超时(Windows & Linux)

转载 2016年08月30日 17:49:14
最近在用C写socket时,发现要对udp接收的时间进行监听,不然使用阻塞接收时将会造成一直等待。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Windows<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
在Windows下似乎操作比较简单,直接调用winsock2.h和ws2_32.lib编程

#include"stdafx.h"
#include"stdio.h"
#include "winsock2.h"
#pragmacomment(lib, "ws2_32.lib") 

 设置接收超时为 nNetTimeout
可采用如下方法:

int nNetTimeout= 2000ms;
if (SOCKET_ERROR ==  setsockopt(serSocket,SOL_SOCKET, SO_RCVTIMEO, (char *)&nNetTimeout,sizeof(int))) 
 
         printf("Set Ser_RecTIMEO error !\r\n"); 
 

int ret = recvfrom(serSocket, recvData, 255, 0, (sockaddr*)&remoteAddr, &nAddrLen);       if(ret<0)
    {
         printf("recv timeout! %d\n",ret);//ret = -1
         //continue;
     }

设置接收超时成功后,若超时,返回值为ret =  -1

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Linux<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

而Linux下则不太一样,timeout若仍采用int型将没有效果。
linux下应将timeout类型改成struct timeval

注意符号:
struct timevaltimeout={4,0};
//即timeout={4,0};或者timeout.tv_sec=4; timeout.tv_usec=0;
//设置接收超时
//setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout));
setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(structtimeval));

//同样接收超时后接收返回-1
if((rec_length=recvfrom(sockfd,recbuf,MAXDATASIZE,0,(structsockaddr *)&peer,&addrlen))== -1){
    printf("recvtimeout!\n");
}

相关文章推荐

socket为send和recv设置超时时间

linux和windows下用setsockopt设置SO_SNDTIMEO,SO_RCVTIMEO的参数的一点区别   UDP的socket在某些情况:如对方关闭时,本地可能sen...
  • aa2650
  • aa2650
  • 2013-12-19 16:05
  • 16047

C语言socket编程设置接收超时(Window&Linux)

最近在用C写socket时,发现要对udp接收的时间进行监听,不然使用阻塞接收时将会造成一直等待。 >>>>>>>>>>>>>>>>>>>>>>>>&...

C socket: 关于connect超时设置

使用阻塞的socket, 可以设置读写超时, struct timeval tv_timeout; tv_timeout.tv_sec = 60; tv_timeout.tv_usec = 0; i...

Eclipse开发C/C++ 安装配置图文详解

MinGW 下载安装   下载地址:http://sourceforge.net/projects/mingw/files/   运行mingw-g...

socket长链接与短连接

长链接------------------ 方法1:应用层自己实现的心跳包  由应用程序自己发送心跳包来检测连接是否正常,大致的方法是:服务器在一个 Timer事件中定时 向客户端发送一个短小精悍...

socket设置超时的几种方法

1.建立socket 2.将该socket设置为非阻塞模式 3.调用connect() 4.使用select()检查该socket描述符是否可写(注意,是可写) 5.根据select()返回的...

C语言socket设置超时/setsockopt函数

//======================= 在Windows下似乎操作比较简单,直接调用winsock2.h和ws2_32.lib编程 #include"stdafx.h" #includ...

Socket超时设置---select()的妙用

http://fanqiang.chinaunix.net/a4/b7/20010913/0900001283.html【 原文由 cpu 所发表 】  用过 WinSock API 网友们知道:Wi...
  • cation
  • cation
  • 2007-05-03 23:18
  • 16519

网络编程Socket之UDP(三)超时设置和非阻塞

前面遗留的两个问题: 1.客户

socket 设置阻塞和超时 .

SETSOCKOPT  设置阻塞SOCKET函数超时时间 IOCTLSOCKET 设置SOCKET函数为阻塞或非阻塞 1,ioctlsocket() #include ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)