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");
}

相关文章推荐

Windows socket之最简单的socket程序

最简单的服务器的socket程序流程如下(面向连接的TCP连接 ): 1. WSAStartup(); 初始化网络库的使用。 2. socket(); 获得一个socket。 3. bind()...

Linux下的socket编程实践(五)设置套接字I/O超时的方案

(一)使用alarm 函数设置超时 #include unsigned int alarm(unsigned int seconds); 它的主要功能是设置信号传送闹钟。信号SIGALRM在...
  • NK_test
  • NK_test
  • 2015年10月11日 19:57
  • 3043

关于recvfrom接收超时

recvfrom,这方法如果不特意设置,默认

recvfrom设置超时

struct timeval tv; int ret; tv.tv_sec = 10; tv.tv_usec = 0; if (setsockopt(s, SOL_SOCKET, SO_RCVTIME...
  • mingcz
  • mingcz
  • 2014年03月09日 01:54
  • 2270

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

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

如何设置socket的connect() recvfrom() 超时

转载自:http://www.cnblogs.com/lidp/archive/2009/06/10/1697904.html 1.首先将标志位设为Non-blocking模式,准备在非阻塞模式下调用...

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

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

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C++ Socket为send recv设置堵塞超时时间

linux和windows下用setsockopt设置SO_SNDTIMEO,SO_RCVTIMEO的参数的一点区别     UDP的socket在某些情况:如对方关闭时,本地可能send...

linux下recv 、send阻塞、非阻塞区别和用法

非阻塞IO 和阻塞IO:        在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明:        基本概念:         ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:socket C编程设置接收超时(Windows & Linux)
举报原因:
原因补充:

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