如何使用FreeBSD的系统调用kqueue?
最近尝试使用BSD的API kqueue进行IO复用编程,这里只考虑kqueue管理tcp套接字,其他的文件描述符/信号等不考虑。
实验环境为Vmware中安装的32位的FreeBSD 10.2-Release i386虚拟机,是目前的最新版。
我在网上找到的代码资料主要是这个:https://en.wikipedia.org/wiki/Kqueue
我的服务端C语言代码: https://github.com/zhaochenyou/tips/blob/master/c/linux/socket/multiplexing/kqueue_server.c
我的客户端C语言代码:https://github.com/zhaochenyou/tips/blob/master/c/linux/socket/multiplexing/kqueue_client.c
目前是有bug的,我自己水平实在捉急,看不出来。
而且不知到为什么gdb无法调试server代码。
FreeBSD默认的C语言环境是clang 3.4 和 gdb 6.1,我自己另外写了好几个程序,用这两个都可以正常的编译和调试,但莫名其妙就是无法调试这个服务端代码。
后来我又尝试安装最新版的clang 3.7,gcc 5.3 和 gdb 7.1,但是很遗憾gdb 7.1有bug,无法使用,FreeBSD上没有lldb。所以目前我自己确实没有调试过这个server代码,只是用fprintf记录一些log来分析服务器的行为。但在log中也有一些莫名其妙的错误。
希望有哪位同学或者朋友可以帮我看一下,如果您在FreeBSD也遇到类似问题,请给我讲一下,不胜感激。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
去看redis的代码,网络那一块代码也非常短,支持kqueue