当前位置: 首页 > news >正文

linux socket:接收时阻塞与非阻塞的设置

一、定义

阻塞模式:指的是当某个函数执行成功的条件当前不满足时,该函数会阻塞当前执行线程,程序执行流在超时时间到达或执行成功的条件满足后恢复继续执行。
非阻塞模式:即使某个函数执行成功的条件不满足,该函数也不会阻塞当前执行线程,而是立即返回,继续执行程序流。

二、如何将socket设置为非阻塞模式


无论是在Windows还是Linux,默认创建的socket都是阻塞模式的。

设置为非阻塞后,send会返回EAGAIN或者EWOULDBLOCK错误,此时可以调用select函数来监视何时可以发送数据。

1、第一种方式

在Linux上,可以通过使用fcntl函数或者ioctl函数给创建的socket增加O_NONBLOCK标志来将socket设置为非阻塞模式,示例代码如下:

使用fcntl函数来设置接收为非阻塞需要的头文件

#include <fcntl.h> 

#include<unistd.h>

在接收前调用,更改接收为非阻塞。

fcntl(sockfd,F_SETFL,O_NONBLOCK);

2、第二种方式

Linux上的socket函数也可以在创建时将socket设置为非阻塞模式

socket函数定义

int socket(int domain, int type, int protocol);

相关文章:

  • 9月23日计算机视觉基础学习笔记——经典机器学习
  • leetcode 并查集整理
  • 前端 | 50天50个前端项目把握基础知识 - 持续更新中
  • 【智能优化算法-凌日搜索算法】基于凌日搜索算法求解单目标优化问题附matlab代码
  • C++11重写muduo网络库5——Thread,EventLoopThread,EventLoopThreadPool
  • NISP的渗透测试怎么操作的
  • 安装Nginx教程
  • Java_接口基本介绍
  • 16、Java——QuickHit游戏
  • SpringBoot--Controller获取HttpServletRequest
  • 牛客刷题笔记
  • 我把华为云的Ubuntu 18.04升级到了Ubuntu 22.04
  • Google Earth Engine-02(主界面介绍)
  • 5.java数据结构与算法 ---- 第七章 八大排序(冒泡;选择;插入/希尔;快排;归并;基数)
  • 新学期你立一个什么样的FLAG?
  • [PHP内核探索]PHP中的哈希表
  • 分享一款快速APP功能测试工具
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 30秒的PHP代码片段(1)数组 - Array
  • Android框架之Volley
  • Angular 响应式表单之下拉框
  • AWS实战 - 利用IAM对S3做访问控制
  • javascript 总结(常用工具类的封装)
  • Java深入 - 深入理解Java集合
  • MD5加密原理解析及OC版原理实现
  • Vue2.0 实现互斥
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 百度小程序遇到的问题
  • 闭包--闭包之tab栏切换(四)
  • 不上全站https的网站你们就等着被恶心死吧
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 深入浅出Node.js
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 无服务器化是企业 IT 架构的未来吗?
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 译自由幺半群
  • 正则表达式小结
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #stm32整理(一)flash读写
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (1)bark-ml
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (动态规划)5. 最长回文子串 java解决
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (九)One-Wire总线-DS18B20
  • (一)基于IDEA的JAVA基础12
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)Linq学习笔记
  • .NET 中创建支持集合初始化器的类型
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET开发不可不知、不可不用的辅助类(一)
  • .net知识和学习方法系列(二十一)CLR-枚举