网络IO 之 信号驱动型io

简介: 网络IO 之 信号驱动型io

五种网络IO

阻塞IO

非阻塞IO

多路IO复用

异步IO

信号驱动IO

  信号驱动IO -- 通过信号的方式来触发 信号处理函数执行相应的逻辑功能,类似于异步的一个过程

 

编写代码

进行信号驱动IO的调试和确认: 写一个udp的demo

#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <fcntl.h>
#include <netinet/in.h>
int sockfd;
//信号处理函数
void sig_func(int arg)
{
  printf("the signal is %d\n",arg);
  char buff[256]={0};
  int ret = read(sockfd,buff,sizeof(buff));
  printf("read buff == %s , len = %d\n",buff,ret);
  write(sockfd,buff,ret);
}
int main(int agrc,char * argv[])
{
//建立udp的套接字
  sockfd = socket(AF_INET,SOCK_DGRAM,0);
  if(sockfd < 0)
  {
    perror("socket");
    return -1;
  }
//初始化信号处理函数
  struct sigaction mysig;
  mysig.sa_handler = sig_func;
  mysig.sa_flags = 0;
  sigaction(SIGIO,&mysig,NULL);
//绑定端口信息
  struct sockaddr_in addr;
  memset(&addr,0,sizeof(struct sockaddr_in));
  addr.sin_family = AF_INET;
  addr.sin_port = htons(9999);
  addr.sin_addr.s_addr = INADDR_ANY;
//设置属性,将fd加入到本进程
  fcntl(sockfd,F_SETOWN,getpid());
//设置同步 非阻塞状态
  int flag = fcntl(sockfd,F_GETFL,0);
  flag = O_ASYNC | O_NONBLOCK;
  fcntl(sockfd,F_SETFL,flag);
//bind
  int ret = bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr));
  if(ret < 0)
  {
    perror("bind");
    return -2;
  }
  while(1)  sleep(1);
  close(sockfd);
  return 0;
}

编译

gcc -o mysig mysig.c

验证

使用工具NetAssist_v4.3.25.exe 进行验证

相关文章
|
10月前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
209 11
|
10天前
|
人工智能 运维 安全
配置驱动的动态 Agent 架构网络:实现高效编排、动态更新与智能治理
本文所阐述的配置驱动智能 Agent 架构,其核心价值在于为 Agent 开发领域提供了一套通用的、可落地的标准化范式。
|
8天前
|
人工智能 安全 数据可视化
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
本文系统性地提出并阐述了一种配置驱动的独立运行时Agent架构,旨在解决当前低代码/平台化Agent方案在企业级落地时面临困难,为Agent开发领域提供了一套通用的、可落地的标准化范式。
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
|
5月前
|
数据采集 机器学习/深度学习 人工智能
运维人的“福音”?AI 驱动的自动化网络监控到底香不香!
运维人的“福音”?AI 驱动的自动化网络监控到底香不香!
355 0
|
5月前
|
监控 应用服务中间件 Linux
掌握并发模型:深度揭露网络IO复用并发模型的原理。
总结,网络 I/O 复用并发模型通过实现非阻塞 I/O、引入 I/O 复用技术如 select、poll 和 epoll,以及采用 Reactor 模式等技巧,为多任务并发提供了有效的解决方案。这样的模型有效提高了系统资源利用率,以及保证了并发任务的高效执行。在现实中,这种模型在许多网络应用程序和分布式系统中都取得了很好的应用成果。
132 35
|
Ubuntu 网络协议 Unix
02理解网络IO:实现服务与客户端通信
网络IO指客户端与服务端通过网络进行数据收发的过程,常见于微信、QQ等应用。本文详解如何用C语言实现一个支持多客户端连接的TCP服务端,涉及socket编程、线程处理及通信流程,并分析“一消息一线程”模式的优缺点。
190 0
|
8月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
202 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
|
7月前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
249 23
|
7月前
|
安全 自动驾驶 物联网
新四化驱动,如何构建智能汽车的“全场景”可进化互联网络?
在智能化、电动化、网联化、共享化的时代浪潮中,汽车正从单纯的 “机械产品” 进化为先进的 “移动智能终端”。在软件定义汽车(SDV)的崭新时代,每一次 OTA 升级的顺利完成、每一秒自动驾驶的精准决策、每一帧车载娱乐交互的流畅呈现,都离不开一张实时响应、全域覆盖、安全可靠的广域网络。
|
7月前
|
SQL druid Java
【YashanDB知识库】YashanDB JDBC驱动查询时抛出io fail:Read timed out异常
【YashanDB知识库】YashanDB JDBC驱动查询时抛出io fail:Read timed out异常