source: libcf/trunk/include/cf_socket.h@ 34

Last change on this file since 34 was 34, checked in by cheese, 11 years ago

#1 add example code for doxygen

File size: 5.6 KB
Line 
1/**
2 * @file cf_socket.h
3 * @author myusgun <myusgun@gmail.com>
4 * @version 0.1
5 *
6 * @remark TCP 소켓만 지원됨
7 *
8 * @section 샘플코드(서버)
9 * @code
10
11#include "cf_socket.h"
12
13int main (void) {
14 int srvsock = 0;
15 int clntsock = 0;
16 short port = 12345;
17 int recvd = 0;
18 char buf[1024] = {0x00,};
19
20 if (CF_Socket_Initialize () < 0) {
21 // error
22 }
23 srvsock = CF_Socket_Server (port, 5);
24 if (srvsock < 0) {
25 // error
26 }
27 clntsock = CF_Socket_Accept (srvsock, NULL);
28 if (clntsock < 0) {
29 // error
30 }
31 if ((recvd = CF_Socket_Recv (clntsock, buf, sizeof (buf))) < 0) {
32 // error
33 }
34 if (CF_Socket_Send (clntsock, buf, recvd) < 0) {
35 // error
36 }
37 CF_Socket_Close (srvsock);
38 CF_Socket_Finalize ();
39
40 return 0;
41}
42
43 * @endcode
44 *
45 * @section 샘플코드(클라이언트)
46 * @code
47
48#include "cf_socket.h"
49
50int main (void) {
51 int sock = 0;
52 int recvd = 0;
53 char buf[1024] = {0x00,};
54 short port = 12345;
55
56 if (CF_Socket_Initialize () < 0) {
57 // error
58 }
59 sock = CF_Socket_Connect ("localhost", port);
60 if (sock < 0) {
61 // error
62 }
63 if (CF_Socket_Send (sock, buf, sizeof (buf)) < 0) {
64 // error
65 }
66 if ((recvd = CF_Socket_Recv (sock, buf, sizeof (buf))) < 0) {
67 // error
68 }
69 CF_Socket_Close (sock);
70 CF_Socket_Finalize ();
71
72 return 0;
73}
74
75 * @endcode
76 */
77#ifndef __CF_SOCKET_H__
78#define __CF_SOCKET_H__
79
80#include "cf_base.h"
81#include <stddef.h>
82
83#ifdef _WIN32
84# include <WinSock2.h>
85#else
86# include <netinet/in.h>
87# include <sys/socket.h>
88# include <arpa/inet.h>
89# include <netdb.h>
90# include <unistd.h>
91#endif
92
93#define CF_ERROR_SOCKET_INITIALIZE CF_ERROR_SOCKET - 1
94#define CF_ERROR_SOCKET_NOT_INITIALIZED CF_ERROR_SOCKET - 2
95#define CF_ERROR_SOCKET_FINALIZE CF_ERROR_SOCKET - 3
96#define CF_ERROR_SOCKET_CLOSE CF_ERROR_SOCKET - 4
97#define CF_ERROR_SOCKET_CREATE CF_ERROR_SOCKET - 5
98#define CF_ERROR_SOCKET_CONNECT CF_ERROR_SOCKET - 6
99#define CF_ERROR_SOCKET_SET_OPTION CF_ERROR_SOCKET - 7
100#define CF_ERROR_SOCKET_GET_OPTION CF_ERROR_SOCKET - 8
101#define CF_ERROR_SOCKET_SET_TIMEOUT CF_ERROR_SOCKET - 9
102#define CF_ERROR_SOCKET_INVALID_ARGS CF_ERROR_SOCKET - 10
103#define CF_ERROR_SOCKET_INVALID_SOCKET CF_ERROR_SOCKET - 11
104#define CF_ERROR_SOCKET_GET_HOST CF_ERROR_SOCKET - 12
105#define CF_ERROR_SOCKET_BIND CF_ERROR_SOCKET - 13
106#define CF_ERROR_SOCKET_LISTEN CF_ERROR_SOCKET - 14
107#define CF_ERROR_SOCKET_ACCEPT CF_ERROR_SOCKET - 15
108#define CF_ERROR_SOCKET_SEND CF_ERROR_SOCKET - 16
109#define CF_ERROR_SOCKET_RECV CF_ERROR_SOCKET - 17
110
111#ifdef _WIN32
112typedef int socklen_t;
113#endif // #ifdef _WIN32
114
115#ifdef __cplusplus
116extern "C" {
117#endif
118
119/**
120 * 소켓이 초기화 상태 확인
121 *
122 * @return 초기화 된 경우, CF_TRUE; 그렇지 않은 경우, CF_FALSE
123 */
124CF_EXPORT CF_BOOL
125CF_Socket_IsInitialized (void);
126
127/**
128 * 소켓 초기화
129 *
130 * @return 성공 시, CF_OK; 실패 시, 오류 코드
131 */
132CF_EXPORT int
133CF_Socket_Initialize (void);
134
135/**
136 * 소켓 해제
137 *
138 * @return 성공 시, CF_OK; 실패 시, 오류 코드
139 */
140CF_EXPORT int
141CF_Socket_Finalize (void);
142
143/**
144 * 소켓 닫기
145 *
146 * @return 성공 시, CF_OK; 실패 시, 오류 코드
147 *
148 * @param sock 소켓
149 */
150CF_EXPORT int
151CF_Socket_Close (const int sock);
152
153/**
154 * 소켓 옵션 설정
155 *
156 * @return 성공 시 CF_OK; 실패 시, 오류 코드
157 *
158 * @param sock 소켓
159 * @param optname 옵션 이름
160 * @param optval 설정할 옵션 값의 메모리
161 * @param optlen 설정할 옵션의 길이
162 */
163CF_EXPORT int
164CF_Socket_SetOption (const int sock,
165 const int optname,
166 const void * optval,
167 const size_t optlen);
168
169/**
170 * 소켓 옵션 얻기
171 *
172 * @return 성공 시 CF_OK; 실패 시, 오류 코드
173 *
174 * @param sock 소켓
175 * @param optname 옵션 이름
176 * @param optval 옵션 값을 가져올 메모리
177 * @param optlen 옵션 길이를 가져올 메모리
178 */
179CF_EXPORT int
180CF_Socket_GetOption (const int sock,
181 const int optname,
182 void * optval,
183 size_t * optlen);
184
185/**
186 * 소켓에 타임아웃 설정
187 *
188 * @return 성공 시 CF_OK; 실패 시, 오류 코드
189 *
190 * @param sock 소켓
191 * @param timeout 타임아웃(sec)
192 */
193CF_EXPORT int
194CF_Socket_SetTimeout (const int sock,
195 const int timeout);
196
197/**
198 * 소켓 연결
199 *
200 * @return 성공 시, 연결된 소켓; 실패 시, 오류 코드
201 *
202 * @param ip 연결할 호스트의 주소 (도메인 이름 가능)
203 * @param port 연결할 호스트의 포트번호
204 */
205CF_EXPORT int
206CF_Socket_Connect (const char * ip,
207 const unsigned short port);
208
209/**
210 * 서버 열기
211 *
212 * @return 성공 시, 서버 소켓; 실패 시, 오류 코드
213 *
214 * @param port 서버 포트
215 * @param backlog listen 시의 backlog 수
216 */
217CF_EXPORT int
218CF_Socket_Server (const unsigned short port,
219 const int backlog);
220
221/**
222 * 소켓 연결
223 *
224 * @return 성공 시, 연결된 소켓; 실패 시, 오류 코드
225 *
226 * @param sock 서버 소켓
227 * @param address [옵션] 클라이언트 정보를 담을 sockaddr_in 구조체 포인터
228 */
229CF_EXPORT int
230CF_Socket_Accept (const int sock,
231 struct sockaddr_in * address);
232
233/**
234 * 데이터 송신
235 *
236 * @return 성공 시, CF_OK; 실패 시, 오류 코드
237 *
238 * @param sock 소켓
239 * @param buf 송신할 데이터
240 * @param len 송신할 데이터의 길이
241 */
242CF_EXPORT int
243CF_Socket_Send (const int sock,
244 const void * buf,
245 const int len);
246
247/**
248 * 데이터 수신
249 *
250 * @return 성공 시, 수신한 데이터의 길이; 실패 시, 오류 코드
251 *
252 * @param sock 소켓
253 * @param buf 데이터를 수신할 버퍼
254 * @param len 데이터를 수신할 버퍼의 최대 크기
255 */
256CF_EXPORT int
257CF_Socket_Recv (const int sock,
258 void * buf,
259 const int len);
260
261#ifdef __cplusplus
262}
263#endif
264
265#endif // #ifndef __CF_SOCKET_H__
Note: See TracBrowser for help on using the repository browser.