问题标签 [libev]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - libev ev_io_stop() 不关闭套接字
我有一个使用 libev 的服务器每当客户端套接字中断时,使用这样的代码停止套接字连接
我是否需要专门调用 shutdown() 或 close()
sockets - 将libev与非阻塞套接字一起使用时如何检查是否建立了连接
我有一些关于如何处理连接超时的代码使用 libev,如下所示(请参阅http://lists.schmorp.de/pipermail/libev/2011q2/001365.html):
并在某个地方执行 ev_run。调用了 connect_cb,在这个回调函数中我用 EV_ERROR 检查了 revents,结果没有错误。这很奇怪,因为我提供了一个不在本地机器上监听的无效端口号。无论如何,我尝试在connect_cb函数中发送一条消息,得到一个错误111,这意味着连接被拒绝。我很困惑!使用非阻塞套接字时如何检查连接是否正确建立?
c - 分叉后libev中的分段错误
我想用libev
. 我想在键盘输入上有一个观察者,它将解析几个命令,如“开始”“停止”“退出”。在“开始”时,我想创建一个管道并派生应用程序以在子级中启动一些工作程序(例如ffmpeg
使用exec()
或只是一些打印某些字符的循环),并在父级的该管道上设置一个观察者以将输出打印到控制台。在“停止”命令中,我想杀死一个孩子并移除一个观察者。
我已经实现了这个程序,但是在 fork 之后,当孩子运行时,我总是在键盘输入上遇到段错误。
起初我以为是因为 ifSTDIN
可以在孩子和父母之间共享。我试图分离孩子,关闭STDIN
孩子。然后我尝试在开始时dup
STDIN
关闭 parent 中的默认值STDIN
,并在 duplicated 上设置一个观察者STDIN
。我还尝试STDOUT/ERR
在分叉之前关闭描述符并在分叉之后将它们恢复到父级中。
我停下来开始user_input
观察user_input
回调,以防万一这有帮助。
ev_default_fork()
然后我尝试ev_loop_fork()
在一个孩子中执行(这不是必需的,因为我想exec()
在 fork 之后或者在任何情况下子循环永远不会获得控制)但没有成功。
我还尝试使用不同的后端(select
而不是epoll
)。
我也试图忽略一些信号,比如SIGHUP
SIGPIPE
SIGCHILD
.
我还注意到,在fork()
原因段错误和 bash 之后我的输入将其作为命令获取,所以如果我执行这样的操作(使用“>”表示自己手写输入,使用“<”表示程序和系统输出):
然后我从源代码构建libev
并尝试调试。段错误发生在ev.c:1698
pri
值为 4,据我所知,这是一个优先事项。pendings[4]
是0x0
这样的段错误发生。当程序不崩溃时,代码进入else
分支。
返回的 fdepoll
是 0,但无论如何我都没有使用 0 作为 fd。此外,对于 0,有一个观察者loop->anfds
对我的回调有user_input
回调。在之前的迭代中,当我输入任何字符串时,没有事件为 0。我检查了管道 fds,它们也有一个大于 0 的数字。
我无法弄清楚这里发生了什么以及我做错了什么。我可以在这里放一些代码,但那里没有什么特别的。这篇文章足够大,所以如果有人要求提供代码,我稍后会发布。
谢谢。
linux - C++ 服务器 - 超过 1024 个连接
我有一个 C++ 聊天服务器,在 linux 中运行并使用 libev 库。如果我尝试连接超过 1024 个客户端,它将因 -1 文件描述符而崩溃。
我想允许对服务器进行超过 1024 个并发连接。通过查看 libev 文档,它看起来可以配置为使用 select、poll 和 epoll,尽管我不确定默认值是什么。
任何有关如何使用 libev 增加文件描述符限制的提示或参考将不胜感激!
libevent - CentOS下编译libev(dev)
我想知道是否有关于如何在 Linux (CentOS) 64 位上编译libev-dev的说明。我找不到与 libev 相关的开发包,也找不到任何关于其编译的教程。ps:请不要包管理器-因为我是在没有特权的情况下在云上安装的。
c - C 结构的第一个字段是否总是保证偏移量为 0?
关于C编程语言...
C/C++ Structure offset的部分问题指出“& 并不总是指向结构的第一个字段的第一个字节”
但是查看http://www.lysator.liu.se/c/rat/c5.html上的“ANSI 基本原理”,它在第 3.5.2.1 节结构和联合说明符中声明“开始时不会出现漏洞”。所以我不确定“基本原理”是否是确定的,但它似乎与那个高度可见的问题的那一部分相矛盾。
那么,它是什么? C 结构的第一个字段是否总是保证偏移量为 0?
&myB
保证和&(myB.myA)
便携方式一样吗?
(更具体地说,Libev 的 libev 用户数据技巧,如何将参数传递给相关回调和许多其他地方确实假设结构中的第一个字段位于 offsetof 0 处……这真的是可移植的吗?)
libevent - libevent 和 libevent-dev 之间的区别
我想知道 libevent 和 libevent-dev 之间有什么区别。所以,我已经从源代码(稳定版本 2.0.21)安装了 libevent - 我真的无法找到 libevent-dev 的源代码。libevent-dev 不是一个单独的包吗?如果我从源代码安装了 libevent stable,我不需要 libevent-dev 吗?谢谢你的时间。
c - ev_timer 回调的调用时间早于应有的时间
我对libev的ev_timer有问题,请看下面的代码:
输出是:
这很奇怪,因为重新启动计时器后,计时器立即触发,但应该是 5 秒后。我发现原因是 sleep(5)。我将其更改为 sleep(4) 然后将不会调用计时器回调。我对liebev 的计时器功能感到困惑。我对计时器有误解吗?以及如何让定时器重新启动后超时后调用定时器回调?
c++ - libev-4.15 无法在 OSX 10.8 上编译
我正在尝试从 libev-3.8(在 OSX 10.8 上编译良好)升级到 libev-4.15 并收到以下错误。
链接到 ev.h:http ://cvs.schmorp.de/libev/ev.h?revision=1.171&view=markup
我的系统配置:
FWIW,相同的配置在 CentOS5.6 上编译得很好。
c - File descriptor of getch()
I want to use libev to listen for keyboard (keystrokes) events in the terminal. My idea is to use (n)curses getch() and set notimeout() (to be nonblocking) to tell getch() not to wait for next keypress.
Is there a file descriptor that getch uses I can watch?