From 5d0e6c40267231a03e127af113be2668fe6f1536 Mon Sep 17 00:00:00 2001 From: EnderIce2 Date: Tue, 7 May 2024 22:09:04 +0300 Subject: [PATCH] Retry connection after EOF count exceeded --- bridge.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/bridge.c b/bridge.c index c5a3163..aeb17a7 100644 --- a/bridge.c +++ b/bridge.c @@ -299,11 +299,13 @@ void ConnectToSocket(int fd) } } +HANDLE hOut = NULL; void PipeBufferInThread(LPVOID lpParam) { bridge_thread *bt = (bridge_thread *)lpParam; print("In thread started using fd %d and pipe %#x\n", bt->fd, bt->hPipe); + int EOFCount = 0; while (TRUE) { char buffer[1024]; @@ -317,12 +319,22 @@ void PipeBufferInThread(LPVOID lpParam) continue; } + if (EOFCount > 4) + { + print("EOF count exceeded\n"); + RetryNewConnection = TRUE; + TerminateThread(hOut, 0); + break; + } + if (unlikely(read == 0)) { print("EOF\n"); Sleep(1000); + EOFCount++; continue; } + EOFCount = 0; print("Reading %d bytes from unix pipe: \"", read); for (int i = 0; i < read; i++) @@ -523,10 +535,10 @@ NewConnection: (LPVOID)&bt, 0, NULL); - HANDLE hOut = CreateThread(NULL, 0, - (LPTHREAD_START_ROUTINE)PipeBufferOutThread, - (LPVOID)&bt, - 0, NULL); + hOut = CreateThread(NULL, 0, + (LPTHREAD_START_ROUTINE)PipeBufferOutThread, + (LPVOID)&bt, + 0, NULL); if (hIn == NULL || hOut == NULL) {