linux异步回调函数,Linux中的异步套接字 – 轮询与回调通过

在决定在我的简单服务器(linux)中实现异步套接字时,我遇到了一个问题.我打算继续poll(),并在调用之间做一些清理和缓存.现在这看起来很浪费,所以我做了更多的挖掘,并找到了一种可能在i / o上实现一些回调的方法.

如果我使用O_NONBLOCK创建套接字,使用SIOCSPGRP ioctl()在i / o上发送SIGIO,并使用sigaction()在i / o期间定义回调函数,是否会产生性能损失,更重要的是它是否有效.

另外,我可以为不同的套接字定义不同的功能吗?

解决方法:

“我将继续轮询(),并在通话之间进行一些清理和缓存.现在这看起来很浪费”

浪费怎么样?你真的尝试过这个吗?

你有你的fd列表.您可以使用列表调用poll或(更好)epoll().当它触发时,你走fd列表并适当地处理每一个.您需要缓存传入和传出数据,因此每个fd都需要某种结构.当我这样做时,我已经为fd结构使用了一个哈希表(从fd生成一个键),但你可能没问题,至少在最初阶段,只是使用一个固定长度的数组并检查操作系统是否存在问题你是一个奇怪的高fd(nb,我从未见过这种情况发生过,而且我通过更多的日志眯起眼睛而不是我能算得上).结构包含指向传入和传出缓冲区的指针,可能是状态变量,例如:

struct connection {

int fd; // mandatory for the hash table version

unsigned char *dataOut;

unsigned char *dataIn;

int state; // probably from an enum

};

struct connection connected[1000]; // your array, or...

…可能链表实际上对于fd来说是最好的,我对哈希表有一个无关的要求.

从那里开始逐步完善.我认为你只是想找到一个简单的方法 – 你可以通过让其他事情变得更难而付出代价;)0.02美元.

标签:asynchronous,linux,sockets,callback,ioctl

来源: https://codeday.me/bug/20190630/1333864.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值