Linux asyn-io for socket
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <signal.h> #define errExit(msg) (perror(msg),(exit(EXIT_FAILURE)))
#define LISTEN_PORT 8888
#define BUF_SIZE 1024 static volatile sig_atomic_t gotSigio = ; static void sigioHandler(int sig)
{
puts("I got the sigio");
gotSigio = ;
} int make_sock(void)
{
int sockfd;
struct sockaddr_in clientaddr;
memset(&clientaddr,SOCK_STREAM,sizeof(clientaddr));
clientaddr.sin_family = AF_INET;
clientaddr.sin_port = htons(LISTEN_PORT);
clientaddr.sin_addr.s_addr = htonl(INADDR_ANY); if((sockfd=socket(AF_INET,SOCK_STREAM,)) < )
{
errExit("socket");
} if(bind(sockfd,(struct sockaddr*)&clientaddr,sizeof(clientaddr)) < )
{
errExit("bind");
} listen(sockfd,);
return sockfd;
}
int main(void)
{
int sockfd,connfd;
struct sockaddr_in clientaddr;
int n;
char buf[BUF_SIZE]; struct sigaction sa;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
sa.sa_handler = sigioHandler;
if(sigaction(SIGIO,&sa,NULL) == -)
{
errExit("sigaction");
} sockfd= make_sock(); while(){
if((connfd= accept(sockfd,(struct sockaddr*)NULL,NULL)) < )
{
errExit("accept");
}
//todo ..
int id ;
id = fcntl(connfd,F_GETOWN);
printf("The id is:%d before change\n",id); fcntl(connfd,F_SETOWN,getpid()); id = fcntl(connfd,F_GETOWN);
printf("The id is:%d after change\n",id); int flags;
flags = fcntl(connfd,F_GETFL);
// if(fcntl(connfd,F_SETFL,flags|O_ASYNC|O_NONBLOCK)==-1){
// errExit("fcntl(F_SETFL)");
// }
//the old linux version support FASYNC instean of O_ASYNC
if(fcntl(connfd,F_SETFL,flags|FASYNC|O_NONBLOCK)==-){
errExit("fcntl(F_SETFL)");
}
//while(1); }
close(sockfd);
}

Linux asyn-io for socket的更多相关文章
- (转)Linux Network IO Model、Socket IO Model - select、poll、epoll
Linux Network IO Model.Socket IO Model - select.poll.epoll 原文:https://www.cnblogs.com/LittleHann/p/ ...
- Linux下的C Socket编程 -- 简介与client端的处理
Linux下的C Socket编程(一) 介绍 Socket是进程间通信的方式之一,是进程间的通信.这里说的进程并不一定是在同一台机器上也有可能是通过网络连接的不同机器上.只要他们之间建立起了sock ...
- Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式
Linux就这个范儿 第15章 七种武器 linux 同步IO: sync.fsync与fdatasync Linux中的内存大页面huge page/large page David Cut ...
- 转:Linux网络IO并行化技术概览
转:http://codinginet.com/articles/view/201605-linux_net_parallel?simple=1&from=timeline&isapp ...
- Socket-IO 系列(一)Linux 网络 IO 模型
Socket-IO 系列(一)Linux 网络 IO 模型 一.基本概念 在正式开始讲 Linux IO 模型前,先介绍 5 个基本概念. 1.1 用户空间与内核空间 现在操作系统都是采用虚拟存储器, ...
- Linux网络IO函数以及TCP连接函数包装
标准I/O VS 网络IO 标准I/O又称为标准I/O流,从某种意义上讲是全双工的,因为程序能够在同一个流上执行输入和输出. Unix/Linux对网络的抽象是一种称为套接字的文件类型.和任何Unix ...
- Linux之IO
速度差异 I/O不仅仅是硬盘,还包括外围的所有设备,比如键盘鼠标,比如1.44M的3.5英寸软盘(还有人记得么).但服务器环境,泛指硬盘. 硬盘有多慢呢?我们不去探究不同设备的实现细节,直接看它的写入 ...
- Linux 进程IO杂项
Linux 进程IO杂项 本文结合一个 pwn 例题,在分析例题的过程中穿插介绍相关知识. 例题来源:PWNABLE.KR 网站,Toddler's Bottle 小节,习题 input. 例题内容: ...
- Linux硬件IO的优化简介
Linux硬件IO的优化简介 首先简单介绍下有哪些硬件设备如下(由于硬件种类厂家等各种因素我就不在此多做介绍有兴趣的可以自行学习): 1.CPU:中央处理器,是计算机运算控制的核心部件之一,相当于人的 ...
- Linux下的C Socket编程 -- server端的继续研究
Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...
随机推荐
- Delphi下使用Oracle Access控件组下TOraSession控件链接
Delphi下使用Oracle Access控件组下TOraSession控件链接数据库,使用 orsn1.Options.Direct:=true; orsn1.Server:=IP:Port: ...
- mysql 数据库导入 导出,解决 导入 错误问题
mysqldump -uxxxx -pxxxx -hrds2383jse53pi6ipwmf.mysql.rds.aliyuncs.com legaokao > /root/legaokaodu ...
- 第1章 C#类型基础
1.1值类型和引用类型 1.1.1 值类型 使用值类型之前需要对值类型的所有元素初始化(普通值类型和结构体). 结构还有一个特性:调用结构上的方法前,需要对其所有的字段进行赋值,为了避免对结构体中所有 ...
- 使用引脚模拟PWM波控制引脚
/********************************* 代码功能:输出PWM波控制引脚 使用函数: 创作时间:2016*10*07 作者邮箱:jikexianfeng@outlook.c ...
- 第一次正式小用Redis存储
由于要做一个同一个页面上多种图表数据的下载,考虑到Azure上面的session很不稳定(可用Redis provider存储session,较稳定),故决定改为Azure支持的Redis,顺便也学习 ...
- java多线程学习-同步之线程通信
这个示例是网上烂大街的,子线程循环100次,主线程循环50次,但是我试了很多次,而且从网上找了很多示例,其实多运行几次,看输出结果并不正确.不知道是我转牛角尖了,还是怎么了.也没有大神问,好痛苦.现在 ...
- shell脚本学习--shell中的变量$
$$ :Shell本身的PID(ProcessID) $! :Shell最后运行的后台Process的PID $? :最后运行的命令的结束代码(返回值) $- :使用Set命令设定的Flag一览 $* ...
- phpmyadmin连接,管理多个mysql服务器
方法一,修改phpMyAdmin/libraries/config.default.php 修改配置文件前,最好先备份一下,万一改错地方了,显示不了,就郁闷了. /** * allow login t ...
- Asp.Net MVC4入门指南(3):添加一个视图
在本节中,您需要修改HelloWorldController类,从而使用视图模板文件,干净优雅的封装生成返回到客户端浏览器HTML的过程. 您将创建一个视图模板文件,其中使用了ASP.NET MVC ...
- FreeBSD_11-系统管理——{Part_4 - 内核参数定制}
特别提醒:自行定制的内核,必須经过全方位测试无誤后,方能用于生产环境 基于:/usr/src/sys/amd64/conf/GENERIC cpu HAMMER ident TEST_kernel # ...