- 论坛徽章:
- 0
|
typedef union epoll_data
{
void *ptr; //这个参数是干什么用的???????????????
int fd;
__uint32_t u32;
__uint64_t u64;
} epoll_data_t;
各位大虾,帮我看看能不能实现这个功能:
ev.data.ptr = X; //给ev.data.ptr 赋值 : 其中 X 值可以是整型, 也可是字符型
ev.data.fd = m_socket;
在后面的可读事件中:
events[n].data.fd 可以返回有可读事件的描述符, 即m_socket
events[n].data.ptr 可否得到 之前赋给ev.data.ptr 的值
谢谢
int epfd, nfds, m_socket;
char Str[1024];
struct epoll_event ev,events[20];
epfd = epoll_create(10);
int n;
while(1)
{
m_socket = accept(); //这个m_socket 是新连接的socket 其他略去
char p[256];
strcpy(p, "asdfghj");
printf("p = %s\n",p);
ev.data.ptr = p; // ev.data.ptr 是否可以和 ev.data.fd 一样 可以传递
printf("ev.data.ptr = %s\n", ev.data.ptr); //此处 正常输出
ev.data.fd = m_socket;
ev.events = EPOLLERR|EPOLLHUP|EPOLLPRI|EPOLLHUP|EPOLLIN|EPOLLET;
epoll_ctl(epfd, EPOLL_CTL_ADD, m_socket, &ev);
nfds = epoll_wait(epfd, events, 20, -1);
for ( n = 0; n < nfds; ++ n)
{
if(events[n].events&EPOLLIN)
{
printf("there is a readable events events[n].events = %d \n", events[n].events);
printf("events[n].data.ptr = %s\n", events[n].data.ptr); //此处段错误,不知道 怎样把ev.data.ptr 传过来
memset(Msg, 0, 256);
int count = recv(events[n].data.fd, Msg, 5, 0);
printf("buf = %s count = %d\n", Msg, count);
}
}
} |
|