当socket 进行TCP 连接的时候(也就是调用connect 时),一旦网络不通,或者是ip 地址无效,就可能使整个线程阻塞。一般为30 秒(我测的是20 秒)。如果设置为非阻塞模式,能很好的解决这个问题,我们可以这样来设置非阻塞模式:调用 ioctl 函数:
unsigned long flag=1;
if (ioctl(sock,FIONBIO,&flag)!=0)
{
closesocket(sock);
return false;
}
以下是对ioctlsocket 函数的相关解释:

int PASCAL FAR ioctlsocket( SOCKET s, long cmd, u_long FAR* argp);
s :一个标识套接口的描述字。
cmd :对套接口s 的操作命令。
argp :指向cmd 命令所带参数的指针。

注释:
本函数可用于任一状态的任一套接口。它用于获取与套接口相关的操作参数,而与具体协议或通讯子系统无关。支持下列命令:
FIONBIO :允许或禁止套接口s 的非阻塞模式。argp 指向一个无符号长整型。如允许非阻塞模式则非零,如禁止非阻塞模式则为零。当创建一个套接口 时,它就处于阻塞模式(也就是说非阻塞模式被禁止)。这与BSD 套接口是一致的。WSAAsynSelect() 函数将套接口自动设置为非阻塞模式。如果 已对一个套接口进行了WSAAsynSelect() 操作,则任何用ioctlsocket() 来把套接口重新设置成阻塞模式的试图将以WSAEINVAL 失败。为了把套接口重新设置成阻塞模式,应用程序必 须首先用WSAAsynSelect() 调用(IEvent 参数置为0 )来禁至WSAAsynSelect() 。

转载于:https://www.cnblogs.com/gaoshaonian/p/9945428.html

套接字设置为(非)阻塞模式相关推荐

  1. java socket 阻塞模式_(四) 如何将socket设置为非阻塞模式

    1. windows平台上无论利用socket()函数还是WSASocket()函数创建的socket都是阻塞模式的: SOCKET WSAAPI socket(    _In_ int af,   ...

  2. [转]Socket的阻塞模式和非阻塞模式

    http://blog.csdn.net/VCSockets/ 阻塞模式 Windows套接字在阻塞和非阻塞两种模式下执行I/O操作.在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即 ...

  3. 非阻塞模式WinSock编程入门

    介绍 WinSock是Windows提供的包含了一系列网络编程接口的套接字程序库.在这篇文章中,我们将介绍如何把它的非阻塞模式引入到应用程序中.文章中所讨论的通信均为面向连接的通信(TCP),为清晰起 ...

  4. WSAAsyncSelect() 非阻塞模式WinSock

    测试资源地址 所幸的是,WinSock同时提供了非阻塞模式,并提出了几种I/O模型.最常见的I/O模型有select模型.WSAAsyncSelect模型及 WSAEventSelect模型,下面选择 ...

  5. 非阻塞模式WinSock编程入门(Socket关联窗口消息机制)

    本文版权归 CSDN trcj 所有,转载请自觉按如下方式于明显位置标明原作者及出处,以示尊重! 作者:trcj 原文:http://blog.csdn.net/trcj1/archive/2010/ ...

  6. c# 非阻塞算法_C#阻塞模式和非阻塞模式

    阻塞模式 Windows套接字在阻塞和非阻塞两种模式下执行I/O操作.在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里.相反,在非阻塞模式下,套接字 ...

  7. 把套接字改成阻塞或非阻塞模式

    默认情况下,TCP套接字处于阻塞模式中.也就是说,除非完成了某项操作,否则不会把控制权交还给程序.例如,调用connect() API后,连接操作会阻止程序继续往下执行,直到连接成功为止.很多情况下, ...

  8. 非阻塞模式(ioctlsocket)

     1 //Server.cpp 2 #include <stdio.h> 3 #include <winsock2.h> //winsock.h (2种套接字版本) 4 # ...

  9. socket阻塞和非阻塞模式

    socket阻塞和非阻塞模式 本文讨论Linux下的socket套接字 一.同步.异步阻塞和非阻塞 同步:主动请求并等待IO操作完成的方式 异步:主动请求数据后,可以去处理其它任务,随后等待IO操作完 ...

最新文章

  1. c语言实现字符指针(字符串)数组的排序
  2. UI组件之TextView及其子类(三)ToggleButton和Switch
  3. dracut 查看linux分区,Centos进入dracut模式,报 /dev/centos/swap does not exist,如何恢复
  4. MD5 32位加密算法源码(测试通过)(系转载 飞扬天下)
  5. 何佳文(帮别人名字作诗)
  6. 有了报表FineReport,为什么还要上FineBI?
  7. sp根据备份文件来创建DB
  8. [转载] 初学者python笔记(字符串用法解析)
  9. cocos2d_x_05_Box2D物理引擎
  10. vsftp客户连接常见故障现象
  11. 代码管理学:首次提出代码的平台化思维
  12. ps画画模糊笔刷_杨雪果ps笔刷|杨雪果CG绘画笔刷(Blur's good brush)下载v7.0 免费版 - 欧普软件下载...
  13. FMEA软件之边界图(FMEAHunter)
  14. ISO-IEC 系列 国际标准组织官方标准文档 下载地址直达
  15. 前端图片文件压缩方案
  16. 状态码406解决方式
  17. 安全知识、工具网址集锦(持续更新)
  18. matlab模拟硅中的点缺陷,硅中的杂质和缺陷.pdf
  19. python3爬虫爬取网易云_【Python3爬虫】网易云音乐歌单下载
  20. kafka的Broker(五)

热门文章

  1. 小米手机升级Android6,小米3能升级miui 6?小米3升级miui v6教程
  2. caffe 人脸关键点检测_人脸检测关键点新增至81个,比Dlib更精准、更贴边
  3. unity中单位是米还是厘米_401场地清理是什么,由施工单位做还是甲方做?造价中如何体现?...
  4. android最新知识点总结,学习android之 知识点总结
  5. arduino i2c 如何写16位寄存器_arduino入门
  6. c# ef报错_C# EF调用MySql出现“未将对象引用设置到对象的实例”错误解决方案
  7. Java类class isSynthetic()方法及示例
  8. mysql查找最大值最小值_查找两个8位数字的最大值| 8086微处理器
  9. python中dict函数_dict()函数以及Python中的示例
  10. 实验10 SQL Server 数据备份/恢复