, 당신은 data.ptr
회원과 각 당신이 epoll_ctl(2)
에게 줄 소켓과 포인트에 대한 작은 구조 (매뉴얼 페이지에 listener
를) 몇 가지 변수에 주위 청취 소켓 디스크립터를 유지하거나 설치해야 하나 struct epoll_event
(소켓이 닫힐 때 해당 구조의 할당을 해제하는 것을 잊지 마십시오). 이 같은
뭔가 :
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 */
}
당신이 그럼 그냥 서버 소켓 기술자에 대한 액세스 권한을 가지고 훨씬 더 많은 작업입니다 볼 수 있지만 한 곳에서 하나의 소켓에 관련된 모든 정보를 유지하는 좋은 특성이 있기 때문에 .
libevent - http://monkey.org/~provos/libevent/를 확인하십시오. 휠을 다시 열지 마십시오. – Dummy00001
예, libevent! 상태 머신 규칙! –
나는 그것을 밖으로 검사 할 것이다; 감사. – someguy