Unix域套接字的边缘触发epoll

用户名

在边缘触发模式下epoll_wait阻止EPOLLOUTUNIX域套接字上事件时,我遇到了一个奇怪的问题

一些细节:我boost ASIO在两个进程之间使用IPC并传递了文件描述符。

以下是一些strace日志:

25097 16:59:04.273555 epoll_ctl(4, EPOLL_CTL_MOD, 37, {EPOLLIN|EPOLLPRI|EPOLLOUT|EPOLLERR|EPOLLHUP|EPOLLET, {u32=40872176, u64=40872176}}) = 0
25097 16:59:04.273588 epoll_wait(4, {{EPOLLOUT, {u32=40872176, u64=40872176}}}, 128, -1) = 1
25097 16:59:04.273617 sendmsg(37, {msg_name(0)=NULL, msg_iov(1)=[{data skipped, 247}], msg_controllen=24, {cmsg_len=24, cmsg_level=SOL_SOCKET, cmsg_type=SCM_RIGHTS, {34, 49}}, msg_flags=0}, MSG_NOSIGNAL) = 247
25097 16:59:04.273671 epoll_ctl(4, EPOLL_CTL_DEL, 34, {0, {u32=0, u64=0}}) = 0
25097 16:59:04.273715 close(34)         = 0
25097 16:59:04.273752 close(49)         = 0
25097 16:59:04.273801 epoll_wait(4, {{EPOLLOUT, {u32=40872176, u64=40872176}}}, 128, -1) = 1
25097 16:59:04.273848 epoll_wait(4,  <unfinished ...>

我在上次epoll_wait通话中受阻我的理解是,当我使用边缘触发模式(EPOLLET)时,我确定可以阻止fd是否已准备好进行写操作。

问题是:如何调试Unix域套接字是否已准备好进行写操作?/proc/net/unix没什么有趣的。

阿玛利

我的理解是,当我使用边缘触发模式(EPOLLET)时,我确定可以阻止fd是否已准备好进行写操作。

我同意。

问题是:如何调试Unix域套接字是否已准备好进行写操作?

如果您的内核文件带有调试符号,则可以执行

gdb vmlinux /proc/kcore

并使用“struct sock地址”Num列中地址/proc/net/unix

p((结构袜子*)0x地址)-> sk_wmem_alloc

-检查已提交的传输队列字节和其他结构元素,以查看套接字的发送缓冲区是否还有空间。

但是实际上您不需要这样做,因为strace输出已经在倒数第二行中显示了该EPOLLOUT事件,并且在事件与epoll_wait最后一行之间没有任何可以改变情况的系统调用,即没有信号沿。我认为在这里等待边缘触发是不明智的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Unix域套接字的边缘触发epoll

来自分类Dev

UNIX域套接字编程3个套接字

来自分类Dev

Node Express Unix域套接字权限

来自分类Dev

Warp:绑定到Unix域套接字

来自分类Dev

lua-socket:Unix域套接字?

来自分类Dev

如何“跟踪” Unix域套接字?

来自分类Dev

使用Unix域套接字控制VLC

来自分类Dev

IPC Unix域套接字bash

来自分类Dev

UNIX域套接字是否溢出?

来自分类Dev

带有VM的Unix域套接字

来自分类Dev

lua-socket:Unix域套接字?

来自分类Dev

对不同主机使用Unix域套接字

来自分类Dev

使用Unix域套接字显示网页

来自分类Dev

如何创建Unix域套接字?

来自分类Dev

非root用户的Unix域套接字

来自分类Dev

python套接字和epoll

来自分类Dev

python套接字和epoll

来自分类Dev

转到net / http unix域套接字连接

来自分类Dev

OpenOffice管道(unix域套接字)不是/ tmp吗?

来自分类Dev

带有unix域套接字的IPC安全吗?

来自分类Dev

如何从命令行访问Unix域套接字?

来自分类Dev

简单的Unix域套接字服务器

来自分类Dev

使用JNI通过UNIX域套接字发送Java FD

来自分类Dev

Netty连接到Unix域套接字失败

来自分类Dev

Unix域套接字如何在Erlang 19中工作

来自分类Dev

通过Unix域套接字IPC机制的对等凭据

来自分类Dev

如何在Ruby中检测断开的Unix域套接字?

来自分类Dev

如何创建一个公共的Unix域套接字?

来自分类Dev

Unix域套接字绑定,重用地址