tcp.h
3.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/**
@file tcp.c
@date 2009-03-27
@author 오재경 freefrug@falinux.com
@brief tcp 를 사용한 통신을 담당한다.
@modify
2010-08-18 (장길석) mingw와 함께 사용할 수 있는 코드 추가
@todo
@bug
@remark
@warning
*/
//
// 저작권 에프에이리눅스(주)
// 외부공개 금지
//
//----------------------------------------------------------------------------
#ifndef _TCP_H_
#define _TCP_H_
#define EMBEDDED_LINUX
#ifdef MS_WIN32
#undef EMBEDDED_LINUX
#endif
//#include <netinet/in.h>
/// tcp 소켓의 형태를 구분한다.
#define SOCK_TYPE_CLIENT 0
#define SOCK_TYPE_SERVER 1
#define SOCK_TYPE_SERVER_CLIENT 2
/// 정책의 대한 옵션
#define BF_POLICY_CLOSE_IOERR (1<<0 ) /// read(), write() 함수 에러발생시 접속을 끊는다.
#define BF_POLICY_CLOSE_TIMEOUT (1<<1 ) /// SOCK_TYPE_SERVER_CLIENT 타입에 한해서 특정시간이 지난후라면 접속을 끊는다.
#define BF_POLICY_RELOAD_TIMEOUT (1<<2 ) /// SOCK_TYPE_SERVER_CLIENT 타입에 한해서 시간을 재갱신한다.
#define BF_POLICY_CLOSE_OFF_LINK (1<<3 ) /// SOCK_TYPE_SERVER_CLIENT 타입에 한해서 하드웨어적인 링크가 끊어지면 접속을 끊는다.
#define BF_POLICY_READ_ZERO_ERROR (1<<4 ) /// read() 함수에서 읽은 값이 0이면 에러처리한다. (소켓접속이 끊어진 후 계속적으로 read 0 이벤트가 호출되는것을 막는다)
#define BF_POLICY_WRITE_NONBLOCK (1<<5 ) /// write() 함수를 호출할때 버퍼가 사용가능한지 확인하기 위해 POLLOUT 이벤트를 확인한다.
/// 기타상수
#define DEFAULT_LIVE_SEC (3600)
#ifdef __cplusplus
extern "C" {
#endif
/// @{
/// @brief 외부에서 사용할수 있는 객체함수 리스트
#ifdef EMBEDDED_LINUX
void tcp_set_policy( unsigned int option ); /// tcp 정책을 설정한다
unsigned int tcp_get_policy( void ); /// tcp 정책을 얻는다.
void tcp_set_livesec( int sec ); /// 통신이 일정시간 없으면 접속을 끊는데 사용하는 시간을 설정한다.
#endif
poll_obj_t *tcp_open_server( int port, int max_client ); /// tcp 소켓을 서버형태로 open 한다.
poll_obj_t *tcp_open_client( char *ip, int port ); /// tcp 소켓을 클라이언트 형태로 open 하고 상대편에 접속한다
//poll_obj_t *tcp_connect_client( poll_obj_t *obj_server, int sockfd, struct sockaddr_in *paddr ); /// 클라이언트 소켓의 접속을 폴관린 객체에 등록한다.
void tcp_close( poll_obj_t *obj ); /// tcp 소켓을 close 한다.
poll_obj_t *tcp_accept_client( poll_obj_t *obj_server ); /// tcp 소켓의 접속요구를 처리한후 클라이언트소켓을 등록한다.
int tcp_write( poll_obj_t *obj, char *buf, int len ); /// tcp 소켓을 통해 데이타를 전송한다.
int tcp_read( poll_obj_t *obj, char *buf, int len ); /// tcp 소켓을 통해 데이타를 읽는다.
int tcp_check_time( poll_obj_t *obj ); /// 일정시간이 지난을때 호출되며 tcp 정책에 의해 일을 수행한다.
int tcp_client_count( poll_obj_t *obj_server ); /// tcp 서버에서 접속된 소켓의 개수를 얻는다.
poll_obj_t *tcp_get_client( poll_obj_t *obj_server, int idx ); /// tcp 서버에서 인덱스로 접속된 소켓 폴 객체를 얻는다.
poll_obj_t *tcp_get_server( poll_obj_t *obj_client ); /// tcp 클라이언트 폴객체에서 서버객체를 얻는다.
int tcp_write_thread( poll_obj_t *obj, char *buf, int len );/// 쓰레드를 생성하여 데이타를 전송한다.
const char *tcp_peer_ip_string( poll_obj_t *obj_client ); /// 연결된 상대편의 IP 문자열을 얻는다.
/// @}
#ifdef __cplusplus
}
#endif
#endif