From 72f943a679cc415ea9902ad487b58ed9c3a98081 Mon Sep 17 00:00:00 2001 From: Manoj Ampalam Date: Mon, 1 Feb 2016 22:50:21 -0800 Subject: [PATCH] 2-1-c1 --- .../win32posix/SampleServer/SampleServer.cpp | 100 ++++++++++++++++-- .../SampleServer/SampleServer.vcxproj | 3 +- .../win32posix/win32posix/win32posix.vcxproj | 2 + .../win32posix/win32posix.vcxproj.filters | 6 ++ 4 files changed, 102 insertions(+), 9 deletions(-) diff --git a/contrib/win32/w32-posix-prototype/win32posix/SampleServer/SampleServer.cpp b/contrib/win32/w32-posix-prototype/win32posix/SampleServer/SampleServer.cpp index bab74d6..5ea7968 100644 --- a/contrib/win32/w32-posix-prototype/win32posix/SampleServer/SampleServer.cpp +++ b/contrib/win32/w32-posix-prototype/win32posix/SampleServer/SampleServer.cpp @@ -416,9 +416,19 @@ int throughput() return 0; } +DWORD WINAPI ThreadProcedure(void* param) +{ + Sleep(20*1000); + int writefd = *((int*)param); + close(writefd); + return 0; +} + int pipetest() { int pipefds[2]; + + w32posix_initialize(); if (-1 == pipe(pipefds)) { printf("creating pipe failed %d\n", errno); @@ -429,15 +439,21 @@ int pipetest() int writefd = pipefds[1]; char* buf = "test characters to write"; char readbuf[512]; - - int written = write(writefd, buf, strlen(buf)); - if (written == -1) { - printf("write to pipe failed %d \n", errno); - close(readfd); - close(writefd); - return -1; + + CreateThread(0, 0, &ThreadProcedure, &readfd, 0, NULL); + int count = 0; + while (1) { + int written = write(writefd, buf, strlen(buf)); + printf("Iteration %d Written %d\n", count++, written); + if (written == -1) { + printf("write to pipe failed %d \n", errno); + close(readfd); + close(writefd); + return -1; + } } + /* int rd = read(readfd, readbuf, 512); if (rd == -1) { printf("reading from pipe failed %d \n", errno); @@ -445,12 +461,80 @@ int pipetest() close(writefd); return -1; } + */ + + close(writefd); close(readfd); - close(writefd); return 0; } +int pipelinetest() +{ + int pipe1[2]; + if (-1 == pipe(pipe1)) + { + printf("creating pipe failed %d\n", errno); + return -1; + } + + int pipe1_out = pipe1[0]; + int pipe1_in = pipe1[1]; + + int fd_flags = fcntl(pipe1_in, F_GETFL); + fcntl(pipe1_in, F_SETFL, fd_flags | O_NONBLOCK); + + fd_flags = fcntl(pipe1_out, F_GETFL); + fcntl(pipe1_out, F_SETFL, fd_flags | O_NONBLOCK); + + + int max_fd = max(pipe1_in, pipe1_out) + 1; + + fd_set read_set, write_set; + + FD_ZERO(&read_set); + FD_ZERO(&write_set); + + FD_SET(pipe1_out, &read_set); + FD_SET(pipe1_in, &write_set); + timeval time; + time.tv_sec = 60000; + time.tv_usec = 0; + char* input = "hi how are you?"; + char read_buf[256]; + + while (-1 != select(max_fd, &read_set, &write_set, NULL, &time)) + { + fd_set read_ret_set = read_set; + fd_set write_ret_set = write_set; + + FD_ZERO(&read_set); + FD_ZERO(&write_set); + + if (FD_ISSET(pipe1_in, &write_ret_set)) + { + int to_write = strlen(input); + int written = write(pipe1_in, input, to_write); + if (written != to_write) + FD_SET(pipe1_in, &write_set); + else + FD_SET(pipe1_out, &read_set); + + } + + if (FD_ISSET(pipe1_out, &read_ret_set)) + { + int bytes_read = read(pipe1_out, read_buf, 256); + if (bytes_read > 0) + { + read_buf[bytes_read] = '\0'; + printf("Received %s \n", read_buf); + } + } + + } +} + int __cdecl main(void) { diff --git a/contrib/win32/w32-posix-prototype/win32posix/SampleServer/SampleServer.vcxproj b/contrib/win32/w32-posix-prototype/win32posix/SampleServer/SampleServer.vcxproj index e693d7d..117f791 100644 --- a/contrib/win32/w32-posix-prototype/win32posix/SampleServer/SampleServer.vcxproj +++ b/contrib/win32/w32-posix-prototype/win32posix/SampleServer/SampleServer.vcxproj @@ -14,6 +14,7 @@ {D52F8255-C3A9-4416-A0A6-8CE63A4D7E43} Win32Proj SampleServer + SampleServer_ @@ -56,7 +57,7 @@ Console true - C:\openssh\Win32-OpenSSH_\contrib\win32\w32-posix-prototype\win32posix\Debug\win32posix.lib;%(AdditionalDependencies) + C:\openssh\Win32-OpenSSH\contrib\win32\w32-posix-prototype\win32posix\Debug\win32posix.lib;%(AdditionalDependencies) diff --git a/contrib/win32/w32-posix-prototype/win32posix/win32posix/win32posix.vcxproj b/contrib/win32/w32-posix-prototype/win32posix/win32posix/win32posix.vcxproj index 01826ec..0efdd07 100644 --- a/contrib/win32/w32-posix-prototype/win32posix/win32posix/win32posix.vcxproj +++ b/contrib/win32/w32-posix-prototype/win32posix/win32posix/win32posix.vcxproj @@ -74,12 +74,14 @@ + + diff --git a/contrib/win32/w32-posix-prototype/win32posix/win32posix/win32posix.vcxproj.filters b/contrib/win32/w32-posix-prototype/win32posix/win32posix/win32posix.vcxproj.filters index 7251265..563a972 100644 --- a/contrib/win32/w32-posix-prototype/win32posix/win32posix/win32posix.vcxproj.filters +++ b/contrib/win32/w32-posix-prototype/win32posix/win32posix/win32posix.vcxproj.filters @@ -30,6 +30,9 @@ Source Files + + Source Files + @@ -41,5 +44,8 @@ Header Files + + Header Files + \ No newline at end of file