From 788969f56fe093fbbad0108177e979278439fc96 Mon Sep 17 00:00:00 2001 From: Claudiu Mihail Date: Sun, 3 Jul 2011 22:54:55 +0000 Subject: [PATCH] [TESTS] - commit 2 very small and simple test apps to check select functionality svn path=/branches/GSoC_2011/TcpIpDriver/; revision=52525 --- tests/simplesocket/selecttest.cpp | Bin 0 -> 3059 bytes tests/simplesocket/server_select.c | 136 +++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+) create mode 100644 tests/simplesocket/selecttest.cpp create mode 100644 tests/simplesocket/server_select.c diff --git a/tests/simplesocket/selecttest.cpp b/tests/simplesocket/selecttest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..2ead044e06104bae1a8fe392c1998f77595af758 GIT binary patch literal 3059 zcmb7GZExC05WcVWub8yD$fOo;m+DSOTZslpP$@*<6zP%(8G9YJ=h$d>f%GE&`_1gG z4TRiDMFQ62*_mganVs3UJd4s*%;1AmG0&@uPwv}NwBcEtZ{(3s=F#6xlDd=8#g}dX z6BIDjapZ)T)9cLs>W)X=X|bu&+Lsmv4yC0r6dUbHH}Fh8 zeK<756Y%!Qt>6aoy0_!>rI)>TaQecTT36K?!;FxwMhh9B$CY`mYdAT|A;V?i6PKk2T&p#hpa?gRsZUS`0!?f=Bt`K3$pOT|Rz(M=6}9G3+{TFG=)`J} zSzPkASAjlYqA}^-o~+_SU8ljqFg6gKc8bD1U3mA=6b~g6KP;8ZtPD8Eu>}{5Z?N99 z&er@TOM#`Ac!(foLiq4TvMl}+evM)NLos=my`j27a6}aCG#g77*29043}@$`~@X`Bm^%KVeD60 z@Kc$H(p+K&s3SAA$NF(qXbNl|JUFiW^5|6b8L{>Kl1VZ^U#bz{SX(D_uqac{8u)Rj z)ZmcPJ3$G9BuQ6tQIw=%sIW&y@cSxVY9%sAME+>I0h0Hm>sPyP;kK=AhFjPyc!~)* z(a5O*P;;);j)Ar32n)vp5Z?T$E05 z9$qpR~yau)n*g_8%_A54mH53$)2hU^_aRY z4V}l3|mo^t3!X!v}1QcCw-GPCIDBhQ^)2TuicuT+Qs!KA2};CztRjAB-~1 z<801zJXQ@m!LSy?I2JRWfecap4DH^mj}srZHY{|C16-)p(u4X_y-}x*t`QtWPN?An zyr=r2$~Y!-CBp}XJW5#PNb52e_=EFZ=Z@mMt>5e3CYY`u3lSNll@5L^gi^5z5cKtbP1Q^ ozEa+F>e0Yqd)LUQ?H}f{3=R+1Maseq4_DDfY##7ZwRL~_7o9p>i~s-t literal 0 HcmV?d00001 diff --git a/tests/simplesocket/server_select.c b/tests/simplesocket/server_select.c new file mode 100644 index 00000000000..23b50c59e7b --- /dev/null +++ b/tests/simplesocket/server_select.c @@ -0,0 +1,136 @@ +#include +#include +#include +#include + +#define PORT 54321 +#define DIRSIZE 8192 + +int main() +{ + char dir[DIRSIZE] = {0}; + int sd, sd_current, ret, rdlen=0; + BOOLEAN done = FALSE; + int addrlen; + struct sockaddr_in sin; + struct sockaddr_in pin; + + struct timeval tv; + struct fd_set readable, writable, exception; + INT nbio = 1; + + WORD version = MAKEWORD(1,1); + WSADATA wsaData; + + WSAStartup(version, &wsaData); + + if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) + { + fprintf(stderr, "socket error\n"); + exit(1); + } + + memset(&sin, 0, sizeof(sin)); + sin.sin_family = AF_INET; + sin.sin_addr.s_addr = INADDR_ANY; + sin.sin_port = htons(PORT); + + if (bind(sd, (struct sockaddr *) &sin, sizeof(sin)) == -1) + { + fprintf(stderr, "bind error\n"); + exit(1); + } + + if (listen(sd, 5) == -1) + { + fprintf(stderr, "listen error\n"); + exit(1); + } + + addrlen = sizeof(pin); + if ((sd_current = accept(sd, (struct sockaddr *) &pin, &addrlen)) == -1) + { + fprintf(stderr, "accept error\n"); + exit(1); + } + + if (ioctlsocket(sd_current, FIONBIO, (ULONG *)&nbio)) + { + fprintf(stderr, "ioctlsocket: %d\n", WSAGetLastError()); + exit(1); + } + + fprintf(stdout, "Client connected...waiting for message\n"); + + do + { + FD_ZERO(&readable); + FD_ZERO(&writable); + FD_ZERO(&exception); + + FD_SET(sd_current, &readable); + FD_SET(sd_current,&writable); + FD_SET(sd_current, &exception); + + tv.tv_sec = 1; tv.tv_usec = 0; + + ret = select(sd_current + 1, &readable, &writable, &exception, &tv ); + + if (ret>0) + { + if (FD_ISSET(sd_current, &writable)) + { + /*if (*towrite_ptr) + { + wrlen = send(sd_current, dir, strlen(dir), 0); + if (wrlen > 0) + towrite_ptr += wrlen; + else + { + done = TRUE; + } + fprintf( stderr, "send: %d bytes\n", wrlen ); + } + else + { + fprintf( stderr, "send: finished header and waiting\n" ); + }*/ + } + if (FD_ISSET(sd_current, &readable)) + { + fprintf(stdout, "Waiting for recv\n"); + rdlen = recv(sd_current, dir, sizeof(dir), 0); + if (rdlen > 0) + { + fprintf(stdout, "Message from client: %s\n", dir); + send(sd_current, dir, rdlen, 0); + } + else + { + fprintf(stderr, "recv error\n" ); + } + + done = TRUE; + } + if (FD_ISSET(sd_current, &exception)) + { + fprintf(stderr, "exception\n"); + done = TRUE; + } + } + else if (!ret) + { + fprintf(stderr, "timeout\r" ); + fflush(stderr); + } + else + { + fprintf(stderr, "return from select: %x\n", ret); + } + } while(!done); + + close(sd); + close(sd_current); + + return 0; +} \ No newline at end of file