/** @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 /// 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