Пример #1
0
void RtmpEPOLLCTXFini(EPOLL_CTX *pCtx)
{
	/* 从epoll 删除fd */
	(void)epoll_op(g_iEpollFd, EPOLL_CTL_DEL, pCtx->iFd, EPOLLIN|EPOLLERR|EPOLLHUP, NULL);
	close(pCtx->iFd);
	
	free(pCtx->pContext);

	free(pCtx);
	
	return ;
}
Пример #2
0
int ListenHandle(int iFd, int iEvent, void *pContext)
{
	int iNewFd;
	int iRet = 0;
	struct sockaddr tmpAddr;
	memset(&tmpAddr, 0, sizeof(tmpAddr));
	int iSocketSize = sizeof(tmpAddr);
	EPOLL_CTX *pCtx; 
	RTMP_SESSION *pServer;
	
	if(iEvent|EPOLLIN)
	{
		iNewFd = accept(iFd, &tmpAddr, (socklen_t *)&iSocketSize); 
		if(RTMP_EPOLLSRV_INVALIDFD < iNewFd)	
		{
			pServer = (RTMP_SESSION *)malloc(sizeof(RTMP_SESSION));
			if(NULL == pServer)
			{
				return -1;
			}
			pServer->handshake  = 0; 
			pCtx = (EPOLL_CTX *)malloc(sizeof(EPOLL_CTX));
			if(NULL == pCtx)
			{
				free(pServer);
				return -1;
			}
			pServer->socket = iNewFd;
			pCtx->iFd = iNewFd;
			pCtx->pContext = pServer;
			pCtx->pfHandle = RtmpSessionHandle;
			/* 加入epoll */
			iRet = epoll_op(g_iEpollFd, EPOLL_CTL_ADD, iNewFd,  EPOLLIN|EPOLLERR|EPOLLHUP,  pCtx);
			
		}
		else
		{
			printf("accept errno:%s",strerror(errno));
		}
	}

	return iRet;
}
Пример #3
0
int poll_remove_all(struct poll *poll, int fd) {
  return epoll_op(poll->fd, EPOLL_CTL_DEL, fd, 0);
}
Пример #4
0
int poll_modify(struct poll *poll, int fd, int events) {
  return epoll_op(poll->fd, EPOLL_CTL_MOD, fd, events);
}
Пример #5
0
int poll_register(struct poll *poll, int fd, int events) {
  return epoll_op(poll->fd, EPOLL_CTL_ADD, fd, events);
}
Пример #6
0
int main(void)
{
	int iFd;
	struct sockaddr_in addr;
	
	printf("in the main\r\n");
	/* 初始化epoll */
	g_iEpollFd = epoll_create(200);
	if(RTMP_EPOLLSRV_INVALIDFD >= g_iEpollFd)
	{
		printf("create epoll failed\r\n");
		return  -1;
	}

	
	/* 创建侦听端口 */
	iFd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(RTMP_EPOLLSRV_INVALIDFD >= iFd)
	{
		printf("create listen socket failed\r\n");
		return  -1;
	}
	addr.sin_family = AF_INET;
	addr.sin_addr.s_addr = inet_addr(g_cRtmpSrvAddr);
	addr.sin_port = htons(g_usRtmpSrvPort);

	if( 0 != bind(iFd, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)))
	{
		return  -1;	 
	}


	if( 0 != listen(iFd, 200))
	{
		return  -1;
	}

	EPOLL_CTX *pEpollCtx = (EPOLL_CTX *)malloc(sizeof(EPOLL_CTX));
	if(NULL == pEpollCtx)
	{
		return -1;
	}

	pEpollCtx->iFd = iFd;
	pEpollCtx->pfHandle = ListenHandle;
	pEpollCtx->pContext = NULL;
	/* 加入epoll */
	if(0 != epoll_op(g_iEpollFd, EPOLL_CTL_ADD, iFd, EPOLLIN|EPOLLERR|EPOLLHUP, pEpollCtx))
	{
		return -1;
	}

	g_iListenFd = iFd;

	epoll_loop(g_iEpollFd);
	

	
	return  0;
	
}