8c2952457
김태훈
응용 프로그램 추가
|
1
2
3
|
/**
@file pollmng.c
@date 2009/3/19
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
4
5
|
@author 오재경 freefrug@falinux.com FALinux.Co.,Ltd.
@brief poll 을 관리한다.
|
8c2952457
김태훈
응용 프로그램 추가
|
6
|
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
7
8
|
@modify 2010/01/04 (오재경) poll_obj_t 구조체에서 poll_ndx 멤버변수 제거
2010/08/18 (장길서) mingw와 함께 사용할 수 있는 코드 추가
|
8c2952457
김태훈
응용 프로그램 추가
|
9
10
11
12
13
14
15
16
17
|
@todo
@bug
@remark
@warning
*/
//
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
18
19
|
// 저작권 에프에이리눅스(주)
// 외부공개 금지
|
8c2952457
김태훈
응용 프로그램 추가
|
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
//
//----------------------------------------------------------------------------
#ifndef _POLL_MNG_H_
#define _POLL_MNG_H_
#define EMBEDDED_LINUX
#ifdef MS_WIN32
#undef EMBEDDED_LINUX
#endif
#define POLL_MAX_COUNT 256
#define POLL_RECURSIVE_COUNT 8
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
36
|
/// 관리하는 함수들의 리턴값
|
8c2952457
김태훈
응용 프로그램 추가
|
37
38
39
40
41
42
|
#define POLL_NO_DESCRIPTOR -2
#define POLL_ASYNC_ERR -1
#define POLL_EVENTED 0
#define POLL_TIME_OUT 1
#define POLL_RECURSIVE_LIMIT_ERR -3
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
43
|
/// poll 로 관리되는 파일핸들의 형태
|
8c2952457
김태훈
응용 프로그램 추가
|
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#define STYP_NONE 0
#define STYP_TCP 1
#define STYP_UDP 2
#define STYP_UDS 3
#define STYP_UART 4
#define STYP_FILE 5
#define STYP_FABIND 6
#define STYP_CAN 7
#define STYP_TIPC 8
#define STYP_TIPC_DGRAM 9
#ifdef EMBEDDED_LINUX
typedef int fd_t;
#else
typedef HANDLE fd_t;
#endif
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
65
|
/// poll 관리 객체
|
8c2952457
김태훈
응용 프로그램 추가
|
66
67
68
69
70
71
|
typedef struct poll_obj_t_ poll_obj_t;
struct poll_obj_t_
{
fd_t fd;
int type;
int tag;
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
72
73
|
void *priv; // tcp, udp, uds 등에서 사용되는 포인터
void *user; // 사용자 포인터
|
8c2952457
김태훈
응용 프로그램 추가
|
74
75
76
77
78
79
80
81
82
83
84
85
86
|
#ifdef MS_WIN32
int is_serial;
#endif
int (*on_poll_in )( poll_obj_t *obj);
int (*on_poll_out)( poll_obj_t *obj);
int (*on_poll_err)( poll_obj_t *obj);
int (*on_poll_hup)( poll_obj_t *obj);
int (*on_timeout )( poll_obj_t *obj);
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
87
|
int (*on_disconnect )( poll_obj_t *obj); // tcp 에서 소켓접속이 끊어지면 호출
|
8c2952457
김태훈
응용 프로그램 추가
|
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
};
#ifdef MS_WIN32
#define POLLIN 0x001 /* There is data to read. */
#define POLLPRI 0x002 /* There is urgent data to read. */
#define POLLOUT 0x004 /* Writing now will not block. */
#define POLLERR 0x008 /* Error condition. */
#define POLLHUP 0x010 /* Hung up. */
struct pollfd{
fd_t fd; /* File descriptor to poll. */
short int events; /* Types of events poller cares about. */
short int revents; /* Types of events that actually occurred. */
#ifdef MS_WIN32
int is_serial;
#endif
};
#endif
#ifdef __cplusplus
extern "C" {
#endif
/// @{
|
3061c73f6
김태훈
인코딩 변경 EUC-KR -> ...
|
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
/// @brief 외부에서 사용할수 있는 객체함수 리스트
void poll_init( void ); /// poll 관리 객체를 생성한다.
void poll_exit( void ); /// poll 관리 객체를 해제한다
void poll_rebuild( void ); /// 리스트로 관리되는 파일디스크립터들을 폴배열에 재구성한다.
poll_obj_t *poll_add( fd_t fd ); /// poll 관리 객체에 열려진 파일 디스크립터를 등록한다.
poll_obj_t *poll_obj_byfd( fd_t fd ); /// poll 관리 객체에서 파일디스크립트로 관리하는 폴객체를 반환한다.
poll_obj_t *poll_get_obj( int idx ); /// poll 관리 객체에서 개개의 폴구조체 포인터를 얻는다.
void *poll_get_priv( int idx ); /// poll 관리 객체에서 사용자 포인터를 얻는다.
int poll_count( void ); /// 관리하는 파일의 개수
void poll_delete( poll_obj_t *obj ); /// poll 관리 객체에서 객체의 포인터로 삭제한다.
void poll_delete_byfd( fd_t fd ); /// poll 관리 객체에서 파일디스크립터로 삭제한다.
int poll_do_loop( int time_out ); /// poll 이벤트 메인 루프함수
int poll_do_one( fd_t fd, int event, int time_out ); /// poll 이벤트를 하나의 파일핸들로만 돌린다.
poll_obj_t *poll_obj_bytag( int tag ); /// poll 관리 객체에서 tag 번호로 찾아 폴객체를 반환한다.
|
8c2952457
김태훈
응용 프로그램 추가
|
135
136
137
138
139
140
141
|
/// @}
#ifdef __cplusplus
}
#endif
#endif
|