source: libcf/trunk/test/socket.c@ 151

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

#1 fix interface and add util module

File size: 4.7 KB
Line 
1#include "cf_socket.h"
2#include "cf_debug.h"
3#include "cf_log.h"
4#include "cf_thread.h"
5
6#include <stdio.h>
7#include <errno.h>
8#include <string.h>
9
10#define THREAD_POOL 2
11#define PORT 1234
12#define COUNT 2
13
14cf_ctx gLog;
15
16int server_worker (void * arg)
17{
18 cf_ctx srvsock = (cf_ctx)arg;
19 cf_ctx clntsock = NULL;
20 int result = 0;
21 int recvd = 0;
22 char buf[1024] = {0x00,};
23 int i = 0;
24
25 /*------------------------------------------------------------*/
26 result = CF_Socket_Accept (srvsock, &clntsock);
27 if (result < 0)
28 {
29 CF_DEBUG_PRINT (stderr, "failed to accept on server\n");
30 return -1;
31 }
32 CF_Log_Write (gLog, "SERVER", "accepted\n");
33
34 for (i = 0 ; i < COUNT ; i++)
35 {
36 if ((recvd = CF_Socket_Recv (clntsock, buf, sizeof (buf))) < 0)
37 {
38 CF_DEBUG_PRINT (stderr, "failed to recv on server\n");
39 return -2;
40 }
41 CF_Log_Write (gLog, "SERVER", "recv {%s}\n", buf);
42 CF_DEBUG_PRINT (stderr, "recv {%s}\n", buf);
43
44 if (CF_Socket_Send (clntsock, buf, (size_t)recvd) < 0)
45 {
46 return -3;
47 }
48 CF_Log_Write (gLog, "SERVER", "resp {%s}\n", buf);
49 CF_DEBUG_PRINT (stderr, "resp {%s}\n", buf);
50 }
51
52 CF_Socket_Close (clntsock);
53
54 return 0;
55 /*------------------------------------------------------------*/
56}
57
58int client_worker (void * arg)
59{
60 cf_ctx sock = NULL;
61 int result = 0;
62 int recvd = 0;
63 char buf[1024] = {0x00,};
64 int i = 0;
65
66 sprintf (buf, "...wow ? is it succeed ?");
67
68 /*------------------------------------------------------------*/
69 result = CF_Socket_Create (&sock);
70 if (result < 0)
71 {
72 CF_DEBUG_PRINT (stderr, "failed to create\n");
73 return -1;
74 }
75
76 result = CF_Socket_Connect (sock, "localhost", PORT);
77 if (result < 0)
78 {
79 CF_DEBUG_PRINT (stderr, "failed to connect on client\n");
80 return -2;
81 }
82 CF_Log_Write (gLog, "CLIENT", "connected\n");
83
84 for (i = 0 ; i < COUNT ; i++)
85 {
86 if (CF_Socket_Send (sock, buf, sizeof (buf)) < 0)
87 {
88 CF_DEBUG_PRINT (stderr, "failed to send on client %d\n", errno);
89 return -3;
90 }
91 CF_Log_Write (gLog, "CLIENT", "sent {%s}\n", buf);
92 CF_DEBUG_PRINT (stderr, "sent {%s}\n", buf);
93
94 memset (buf, 0x00, sizeof (buf));
95
96 if ((recvd = CF_Socket_Recv (sock, buf, sizeof (buf))) < 0)
97 {
98 CF_DEBUG_PRINT (stderr, "failed to recv on client\n");
99 return -4;
100 }
101 CF_Log_Write (gLog, "CLIENT", "recv {%s}\n", buf);
102 CF_DEBUG_PRINT (stderr, "recv {%s}\n", buf);
103 }
104
105 CF_Socket_Close (sock);
106
107 return 0;
108 /*------------------------------------------------------------*/
109}
110
111int main ()
112{
113 cf_ctx stid[THREAD_POOL];
114 cf_ctx ctid[THREAD_POOL];
115
116 char ip[256] = {0x00,};
117 unsigned short port = 0;
118 cf_ctx sock = 0;
119 int result = 0;
120 int iter = 0;
121
122 /*------------------------------------------------------------*/
123 if (CF_Log_Create (&gLog, "socket.txt", CF_LOG_DEFAULT_BUFFER) < 0)
124 CF_DEBUG_PRINT (stderr, "failed to open log\n");
125
126 CF_Log_Write (gLog, "LOG_MULTITHREAD", "multi-threaded logging test with socket\n");
127
128 if (CF_Socket_Initialize () < 0)
129 {
130 CF_DEBUG_PRINT (stderr, "failed to initialize socket\n");
131 return -1;
132 }
133 CF_Log_Write (gLog, "SOCKET", "socket initialized\n");
134
135 result = CF_Socket_Create (&sock);
136 if (result < 0)
137 {
138 CF_DEBUG_PRINT (stderr, "failed to create\n");
139 return -2;
140 }
141
142 result = CF_Socket_Server (sock, PORT, 5);
143 if (sock < 0)
144 {
145 CF_DEBUG_PRINT (stderr, "failed to ready server %d\n", sock);
146 return -3;
147 }
148 CF_Socket_GetIP (sock, ip);
149 CF_Socket_GetPort (sock, &port);
150 CF_Log_Write (gLog, "SOCKET", "socket ready [%s:%d]\n", ip, port);
151 CF_DEBUG_PRINT (stderr, "socket ready [%s:%d]\n", ip, port);
152
153
154 for (iter = 0 ; iter < THREAD_POOL ; iter++)
155 {
156 if (CF_Thread_Create (&stid[iter], server_worker, sock) < 0)
157 {
158 CF_DEBUG_PRINT (stderr, "failed to create %dth thread\n", iter);
159 return -4;
160 }
161 CF_Log_Write (gLog, "SOCKET", "create server thread-%d\n", iter);
162 }
163
164 for (iter = 0 ; iter < THREAD_POOL ; iter++)
165 {
166 if (CF_Thread_Create (&ctid[iter], client_worker, &sock) < 0)
167 {
168 CF_DEBUG_PRINT (stderr, "failed to create %dth thread\n", iter);
169 return -5;
170 }
171 CF_Log_Write (gLog, "SOCKET", "create client thread-%d\n", iter);
172 }
173
174 for (iter = 0 ; iter < THREAD_POOL ; iter++)
175 {
176 if (CF_Thread_Start (stid[iter]) < 0)
177 {
178 CF_DEBUG_PRINT (stderr, "failed to start %dth thread\n", iter);
179 return -6;
180 }
181 }
182
183 for (iter = 0 ; iter < THREAD_POOL ; iter++)
184 {
185 if (CF_Thread_Start (ctid[iter]) < 0)
186 {
187 CF_DEBUG_PRINT (stderr, "failed to start %dth thread\n", iter);
188 return -7;
189 }
190 }
191
192 for (iter = 0 ; iter < THREAD_POOL ; iter++)
193 {
194 CF_Thread_Join (ctid[iter]);
195 CF_Thread_Destroy (ctid[iter]);
196
197 CF_Thread_Join (stid[iter]);
198 CF_Thread_Destroy (stid[iter]);
199
200 CF_Log_Write (gLog, "SOCKET", "join server thread-%d\n", iter);
201 }
202
203 CF_Socket_Close (sock);
204
205 CF_Socket_Finalize ();
206
207 CF_Log_Destroy (gLog);
208 /*------------------------------------------------------------*/
209
210 return 0;
211}
Note: See TracBrowser for help on using the repository browser.