1919#else
2020#include <winsock2.h>
2121#include <ws2tcpip.h>
22+ #include <fluent-bit/flb_compat.h>
2223#endif
2324
2425#include "flb_tests_internal.h"
@@ -35,6 +36,9 @@ struct oauth2_mock_server {
3536 int expires_in ;
3637 char latest_token [64 ];
3738 pthread_t thread ;
39+ #ifdef _WIN32
40+ int wsa_initialized ;
41+ #endif
3842};
3943
4044static void compose_http_response (flb_sockfd_t fd , int status , const char * body )
@@ -176,14 +180,34 @@ static int oauth2_mock_server_start(struct oauth2_mock_server *server, int expir
176180 int on = 1 ;
177181 struct sockaddr_in addr ;
178182 socklen_t len ;
183+ #ifdef _WIN32
184+ WSADATA wsa_data ;
185+ int wsa_result ;
186+ #endif
179187
180188 memset (server , 0 , sizeof (struct oauth2_mock_server ));
181189 server -> expires_in = expires_in ;
182190 server -> resource_challenge = resource_challenge ;
183191
192+ #ifdef _WIN32
193+ /* Initialize Winsock on Windows */
194+ wsa_result = WSAStartup (MAKEWORD (2 , 2 ), & wsa_data );
195+ if (wsa_result != 0 ) {
196+ flb_errno ();
197+ return -1 ;
198+ }
199+ server -> wsa_initialized = 1 ;
200+ #endif
201+
184202 server -> listen_fd = socket (AF_INET , SOCK_STREAM , 0 );
185203 if (server -> listen_fd == FLB_INVALID_SOCKET ) {
186204 flb_errno ();
205+ #ifdef _WIN32
206+ if (server -> wsa_initialized ) {
207+ WSACleanup ();
208+ server -> wsa_initialized = 0 ;
209+ }
210+ #endif
187211 return -1 ;
188212 }
189213
@@ -197,26 +221,51 @@ static int oauth2_mock_server_start(struct oauth2_mock_server *server, int expir
197221 if (bind (server -> listen_fd , (struct sockaddr * ) & addr , sizeof (addr )) < 0 ) {
198222 flb_errno ();
199223 flb_socket_close (server -> listen_fd );
224+ #ifdef _WIN32
225+ if (server -> wsa_initialized ) {
226+ WSACleanup ();
227+ server -> wsa_initialized = 0 ;
228+ }
229+ #endif
200230 return -1 ;
201231 }
202232
203233 if (listen (server -> listen_fd , 4 ) < 0 ) {
204234 flb_errno ();
205235 flb_socket_close (server -> listen_fd );
236+ #ifdef _WIN32
237+ if (server -> wsa_initialized ) {
238+ WSACleanup ();
239+ server -> wsa_initialized = 0 ;
240+ }
241+ #endif
206242 return -1 ;
207243 }
208244
209245 len = sizeof (addr );
246+ memset (& addr , 0 , sizeof (addr ));
210247 if (getsockname (server -> listen_fd , (struct sockaddr * ) & addr , & len ) < 0 ) {
211248 flb_errno ();
212249 flb_socket_close (server -> listen_fd );
250+ #ifdef _WIN32
251+ if (server -> wsa_initialized ) {
252+ WSACleanup ();
253+ server -> wsa_initialized = 0 ;
254+ }
255+ #endif
213256 return -1 ;
214257 }
215258
216259 server -> port = ntohs (addr .sin_port );
217260 if (server -> port == 0 ) {
218261 flb_errno ();
219262 flb_socket_close (server -> listen_fd );
263+ #ifdef _WIN32
264+ if (server -> wsa_initialized ) {
265+ WSACleanup ();
266+ server -> wsa_initialized = 0 ;
267+ }
268+ #endif
220269 return -1 ;
221270 }
222271
@@ -225,6 +274,12 @@ static int oauth2_mock_server_start(struct oauth2_mock_server *server, int expir
225274 if (pthread_create (& server -> thread , NULL , oauth2_mock_server_thread , server ) != 0 ) {
226275 printf ("pthread_create failed: %s\n" , strerror (errno ));
227276 flb_socket_close (server -> listen_fd );
277+ #ifdef _WIN32
278+ if (server -> wsa_initialized ) {
279+ WSACleanup ();
280+ server -> wsa_initialized = 0 ;
281+ }
282+ #endif
228283 return -1 ;
229284 }
230285 printf ("server started on port %d\n" , server -> port );
@@ -283,7 +338,14 @@ static void oauth2_mock_server_stop(struct oauth2_mock_server *server)
283338 shutdown (server -> listen_fd , SHUT_RDWR );
284339 pthread_join (server -> thread , NULL );
285340 flb_socket_close (server -> listen_fd );
341+ server -> listen_fd = FLB_INVALID_SOCKET ;
342+ }
343+ #ifdef _WIN32
344+ if (server -> wsa_initialized ) {
345+ WSACleanup ();
346+ server -> wsa_initialized = 0 ;
286347 }
348+ #endif
287349}
288350
289351static struct flb_oauth2 * create_oauth_ctx (struct flb_config * config ,
0 commit comments