首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >epoll:区分"listener“FD

epoll:区分"listener“FD
EN

Stack Overflow用户
提问于 2010-06-29 02:36:19
回答 1查看 442关注 0票数 0

如何区分"listener“文件描述符和"client”文件描述符?

下面是我在manpage示例中看到的内容:

代码语言:javascript
复制
if(events[n].data.fd == listener) {
    ...
} else {
    ...
}

‘但如果我无法访问listener怎么办

如果这是一个模糊的问题,很抱歉。我不太确定该怎么说。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-29 03:01:19

假设您正在编写服务器,您应该将侦听套接字描述符保留在某个变量中(手册页中的listener),或者为您提供给epoll_ctl(2)的每个套接字设置一个小结构,并使用struct epoll_eventdata.ptr成员指向它(不要忘记在socket关闭时取消分配该结构)。

如下所示:

代码语言:javascript
复制
struct socket_ctl
{
    int fd;    /* socket descriptor */
    int flags; /* my info about the socket, say (flags&1) != 0 means server */
    /* whatever else you want to have here, like pointers to buffers, etc. */
};
...
struct socket_ctl* pctl = malloc( sizeof( struct socket_ctl ));
/* check for NULL */
pctl->fd = fd;
pctl->flags = 1; /* or better some enum or define */
struct epoll_event ev;
ev.events = EPOLLIN|...;
ev.data.ptr = pctl;
...
if (( events[n].data.ptr->flags & 1 ) != 0 )
{
    /* this is server socket */
}

正如您所看到的,这比仅仅访问服务器套接字描述符要多得多,但它有一个很好的属性,可以将与一个套接字相关的所有信息保存在一个地方。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3135154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档