Libevent R2: Getting an event base

From 탱이의 잡동사니
Revision as of 13:02, 28 January 2015 by Pchero (talk | contribs) (Created page with "== Overview == 원문은 이곳<ref>http://www.wangafu.net/~nickm/libevent-book/Ref2_eventbase.html</ref>에서 확인할 수 있다. Libevent 를 사용하기전, 하나 혹...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Overview

원문은 이곳<ref>http://www.wangafu.net/~nickm/libevent-book/Ref2_eventbase.html</ref>에서 확인할 수 있다.

Libevent 를 사용하기전, 하나 혹은 그 이상의 event_base_structure를 생성해야 한다. 각각의 event_base_structure 는 설정된 이벤트를 감시하며, Poll 한다.

만약 event_base 가 Locking 을 사용한다면 멀티 스레드 환경에서도 사용이 가능하지만, 만약 사용하지 않는다면 반드시 싱글 스레드 환경에서만 사용해야 한다. 그리고 멀티 스레드 IO polling 을 하고자 한다면, 각각의 스레드마다 event_base 를 생성해 주어야 한다.

각각의 event_base는 어떤 이벤트들이 준비됐는지 확인하기 위해 "메소드" 혹은 "백엔드"를 사용한다. 다음과 같은 메소드들이 있다.

  • select
  • poll
  • epoll
  • kqueue
  • devpoll
  • evport
  • win32

사용자는 환경 변수를 통해서 특정 백엔드/메소드 를 비활성화 시킬 수 있다. 예를 들어 kqueue 를 비활성화 시키고 싶다면 EVENT_NOKQUEUE 환경변수를 설정하면 된다. 만약 프로그램 내에서 특정 백엔드/메소드를 비활성화 시키고 싶다면 event_config_avoid_method() 를 사용하면 된다.

Setting up a default event_base

event_base_new() 함수는 새로운 event base를 기본 설정상태로 생성하고 리턴한다. 환경 변수를 검사하고 새로 생성한 event_base 포인터를 넘겨주는데, 만약 에러가 발생하면 NULL을 리턴한다.

만약 여러 개의 메소드가 있다면, 동작 OS 에서 가장 빨리 작동하는 메소드를 자동으로 선택한다.

Interface

<source lang=c> struct event_base *event_base_new(void); </source>

대부분의 프로그램에서는 이것만으로도 충분할 것이다. event_base_new() 함수는 <event2/event.h> 파일에 선언되어 있으며, Libevent 1.4.3 이후부터 사용 가능하다.

Setting up a complicated event_base

만약 event_base 에 대해 더 세밀한 설정을 하고 싶다면 event_config 를 사용할 수 있다. event_config 에 원하는 내용을 설정하고, event_base 생성시 인자값으로 사용할 수 있다.

Interface

<source lang=c> struct event_config *event_config_new(void); struct event_base *event_base_new_with_config(const struct event_config *cfg); void event_config_free(struct event_config *cfg); </source>

위 함수들을 event_base 와 함께 사용하고자 한다면 먼저 event_config_new() 를 사용해 event_config 를 생성하고, 다른 함수들을 통해 event_config 를 원하는 내용으로 설정한다. 그 후에, event_base_new_with_config() 함수와 함께 사용하여 event_base 를 생성하면 된다. 그리고, 사용이 끝난 event_config 는 event_config_free() 로 해제하면 된다.

Interface