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

Linux中的异步套接字 – 轮询与回调通过,第1张

概述在决定在我的简单服务器( linux)中实现异步套接字时,我遇到了一个问题.我打算继续poll(),并在调用之间做一些清理和缓存.现在这看起来很浪费,所以我做了更多的挖掘,并找到了一种可能在i / o上实现一些回调的方法. 如果我使用O_NONBLOCK创建套接字,使用SIOCSPGRP ioctl()在i / o上发送SIGIO,并使用sigaction()在i / o期间定义回调函数,是否会产 在决定在我的简单服务器( linux)中实现异步套接字时,我遇到了一个问题.我打算继续poll(),并在调用之间做一些清理和缓存.现在这看起来很浪费,所以我做了更多的挖掘,并找到了一种可能在i / o上实现一些回调的方法.

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

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

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

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

你有你的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美元.

总结

以上是内存溢出为你收集整理的Linux中的异步套接字 – 轮询与回调通过全部内容,希望文章能够帮你解决Linux中的异步套接字 – 轮询与回调通过所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/1017752.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存