linux epoll 发送数据,linux下使用epoll接收Udp数据

本文介绍了如何利用epoll_create创建句柄,并通过epoll_ctl将UDP套接字添加到epoll实例中,以实现高效的数据接收。在循环中,通过epoll_wait等待事件触发,然后使用recvfrom接收来自UDP的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,使用epoll_create创建一个句柄:

g_epollFd = epoll_create(MAX_EVENTS);

定义一个结构:

typedef struct send_event

{

int fdRecv;

struct sockaddr_in  RecvAddr;

} Recv_Event;

使用epoll_ctl将Udp句柄加入到epoll:

Recv_Event *pEvent = (Recv_Event*)malloc(sizeof( Recv_Event));

pEvent->fdRecv =socket(AF_INET,SOCK_DGRAM,0);

pEvent->RecvAddr.sin_family=AF_INET;

pEvent->RecvAddr.sin_port=8888;

bind(pEvent->fdRecv ,(struct sockaddr *)&pEvent->RecvAddr,sizeof(struct sockaddr));

struct epoll_event epv = {0};

epv.data.ptr =pEvent;

int op =EPOLL_CTL_ADD;

epv.events=EPOLLIN ;

epoll_ctl(g_epollFd, op, pEvent->fdRecv, &epv);

在线程中,使用epoll_wait来接收数据:

struct epoll_event events[MAX_EVENTS];  int SenderAddrSize = sizeof(struct sockaddr_in);  while(1)  {      int fds = epoll_wait(g_epollFd, events, MAX_EVENTS, 0);   if (fds ==-1)    return 0;   if (fds ==0)   {    usleep(1);    continue;   }   int i =0;   for(i = 0; i < fds; i++)   {  Recv_Event *event = (Send_Event*)events[i].data.ptr;    char buffer[BUFFER_SIZE];    short len =0;    len = recvfrom(event ->fdRecv, buffer, BUFFER_SIZE, MSG_DONTWAIT,(struct sockaddr *)&event ->RecvAddr,(socklen_t*)&SenderAddrSize);      }  } ok,可以使用epoll来接收udp数据了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值