Blame view

app/app-prime-modbus/include/fanet/tcp.h 3.65 KB
8c2952457   김태훈   응용 프로그램 추가
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