/** * @file cf_socket.h * @author myusgun * @version 0.1 * @remark TCP 소켓만 지원됨 */ #ifndef __CF_SOCKET_H__ #define __CF_SOCKET_H__ #include "cf_base.h" #include #ifdef _WIN32 # include #else # include # include # include # include # include #endif #define CF_ERROR_SOCKET_INITIALIZE CF_ERROR_SOCKET - 1 #define CF_ERROR_SOCKET_NOT_INITIALIZED CF_ERROR_SOCKET - 2 #define CF_ERROR_SOCKET_FINALIZE CF_ERROR_SOCKET - 3 #define CF_ERROR_SOCKET_CLOSE CF_ERROR_SOCKET - 4 #define CF_ERROR_SOCKET_CREATE CF_ERROR_SOCKET - 5 #define CF_ERROR_SOCKET_CONNECT CF_ERROR_SOCKET - 6 #define CF_ERROR_SOCKET_SET_OPTION CF_ERROR_SOCKET - 7 #define CF_ERROR_SOCKET_GET_OPTION CF_ERROR_SOCKET - 8 #define CF_ERROR_SOCKET_SET_TIMEOUT CF_ERROR_SOCKET - 9 #define CF_ERROR_SOCKET_INVALID_ARGS CF_ERROR_SOCKET - 10 #define CF_ERROR_SOCKET_INVALID_SOCKET CF_ERROR_SOCKET - 11 #define CF_ERROR_SOCKET_GET_HOST CF_ERROR_SOCKET - 12 #define CF_ERROR_SOCKET_BIND CF_ERROR_SOCKET - 13 #define CF_ERROR_SOCKET_LISTEN CF_ERROR_SOCKET - 14 #define CF_ERROR_SOCKET_ACCEPT CF_ERROR_SOCKET - 15 #define CF_ERROR_SOCKET_SEND CF_ERROR_SOCKET - 16 #define CF_ERROR_SOCKET_RECV CF_ERROR_SOCKET - 17 #ifdef _WIN32 typedef int socklen_t; #endif // #ifdef _WIN32 #ifdef __cplusplus extern "C" { #endif /** * 소켓이 초기화 상태 확인 * * @return 초기화 된 경우, CF_TRUE; 그렇지 않은 경우, CF_FALSE */ CF_EXPORT CF_BOOL CF_Socket_IsInitialized (void); /** * 소켓 초기화 * * @return 성공 시, CF_OK; 실패 시, 오류 코드 */ CF_EXPORT int CF_Socket_Initialize (void); /** * 소켓 해제 * * @return 성공 시, CF_OK; 실패 시, 오류 코드 */ CF_EXPORT int CF_Socket_Finalize (void); /** * 소켓 닫기 * * @return 성공 시, CF_OK; 실패 시, 오류 코드 * * @param sock 소켓 */ CF_EXPORT int CF_Socket_Close (const int sock); /** * 소켓 옵션 설정 * * @return 성공 시 CF_OK; 실패 시, 오류 코드 * * @param sock 소켓 * @param optname 옵션 이름 * @param optval 설정할 옵션 값의 메모리 * @param optlen 설정할 옵션의 길이 */ CF_EXPORT int CF_Socket_SetOption (const int sock, const int optname, const void * optval, const size_t optlen); /** * 소켓 옵션 얻기 * * @return 성공 시 CF_OK; 실패 시, 오류 코드 * * @param sock 소켓 * @param optname 옵션 이름 * @param optval 옵션 값을 가져올 메모리 * @param optlen 옵션 길이를 가져올 메모리 */ CF_EXPORT int CF_Socket_GetOption (const int sock, const int optname, void * optval, size_t * optlen); /** * 소켓에 타임아웃 설정 * * @return 성공 시 CF_OK; 실패 시, 오류 코드 * * @param sock 소켓 * @param timeout 타임아웃(sec) */ CF_EXPORT int CF_Socket_SetTimeout (const int sock, const int timeout); /** * 소켓 연결 * * @return 성공 시, 연결된 소켓; 실패 시, 오류 코드 * * @param ip 연결할 호스트의 주소 (도메인 이름 가능) * @param port 연결할 호스트의 포트번호 */ CF_EXPORT int CF_Socket_Connect (const char * ip, const unsigned short port); /** * 서버 열기 * * @return 성공 시, 서버 소켓; 실패 시, 오류 코드 * * @param port 서버 포트 * @param backlog listen 시의 backlog 수 */ CF_EXPORT int CF_Socket_Server (const unsigned short port, const int backlog); /** * 소켓 연결 * * @return 성공 시, 연결된 소켓; 실패 시, 오류 코드 * * @param sock 서버 소켓 * @param address [옵션] 클라이언트 정보를 담을 sockaddr_in 구조체 포인터 */ CF_EXPORT int CF_Socket_Accept (const int sock, struct sockaddr_in * address); /** * 데이터 송신 * * @return 성공 시, CF_OK; 실패 시, 오류 코드 * * @param sock 소켓 * @param buf 송신할 데이터 * @param len 송신할 데이터의 길이 */ CF_EXPORT int CF_Socket_Send (const int sock, const void * buf, const int len); /** * 데이터 수신 * * @return 성공 시, 수신한 데이터의 길이; 실패 시, 오류 코드 * * @param sock 소켓 * @param buf 데이터를 수신할 버퍼 * @param len 데이터를 수신할 버퍼의 최대 크기 */ CF_EXPORT int CF_Socket_Recv (const int sock, void * buf, const int len); #ifdef __cplusplus } #endif #endif // #ifndef __CF_SOCKET_H__