Author: cmihail
Date: Sun Jul  3 22:54:55 2011
New Revision: 52525

URL: http://svn.reactos.org/svn/reactos?rev=52525&view=rev
Log:
[TESTS]
- commit 2 very small and simple test apps to check select functionality

Added:
    branches/GSoC_2011/TcpIpDriver/tests/simplesocket/selecttest.cpp   (with 
props)
    branches/GSoC_2011/TcpIpDriver/tests/simplesocket/server_select.c   (with 
props)

Added: branches/GSoC_2011/TcpIpDriver/tests/simplesocket/selecttest.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/TcpIpDriver/tests/simplesocket/selecttest.cpp?rev=52525&view=auto
==============================================================================
--- branches/GSoC_2011/TcpIpDriver/tests/simplesocket/selecttest.cpp (added)
+++ branches/GSoC_2011/TcpIpDriver/tests/simplesocket/selecttest.cpp 
[iso-8859-1] Sun Jul  3 22:54:55 2011
@@ -1,0 +1,152 @@
+#include <stdio.h>
+#include <windows.h>
+#include <winsock2.h>
+
+SOCKET Socket;
+HANDLE thread_handle;
+DWORD thread_id;
+WSANETWORKEVENTS netevents;
+HWND Window;
+UINT_PTR TimerId;
+UINT AppState;
+char towrite[1024], *towrite_ptr = towrite;
+char outpath[1024];
+
+DWORD WINAPI thread(LPVOID data)
+{
+    FILE *f = NULL;
+    DWORD Ret;
+    BOOLEAN done = FALSE;
+    int wrlen, rdlen;
+    struct timeval tv;
+    struct fd_set readable, writable, exception;
+
+    do
+       {
+               FD_ZERO(&readable);
+               FD_ZERO(&writable);
+               FD_ZERO(&exception);
+
+               FD_SET(Socket, &readable);
+               if (*towrite_ptr)
+                       FD_SET(Socket,&writable);
+               FD_SET(Socket, &exception);
+
+               tv.tv_sec = 1; tv.tv_usec = 0;
+
+               Ret = select( Socket + 1, &readable, &writable, &exception, &tv 
);
+
+               if ( Ret > 0 )
+               {
+                       if (FD_ISSET(Socket, &writable))
+                       {
+                               if (*towrite_ptr)
+                               {
+                                       wrlen = send(Socket, towrite_ptr, 
strlen(towrite_ptr), 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(Socket, &readable))
+                       {
+                               if (!f)
+                                       f = fopen( outpath, "wb" );
+                               if (!f)
+                               {
+                                       done = TRUE;
+                               }
+                               rdlen = recv( Socket, outpath, sizeof(outpath), 
0 );
+                               if (rdlen > 0)
+                               {
+                                       fwrite( outpath, 1, rdlen, f );
+                                       fprintf( stderr, "recv: %d bytes\n", 
rdlen ); 
+                               }
+                               else
+                               {
+                                       fprintf( stderr, "closed socket\n" );
+                                       done = TRUE;
+                               }
+                       }
+                       if( FD_ISSET(Socket, &exception) )
+                       {
+                               done = TRUE;
+                       }
+               }
+               else if( !Ret )
+               { 
+                       fprintf( stderr, "timeout\r" ); fflush( stderr );
+               }
+               else
+               {
+                       fprintf( stderr, "return from select: %x\n", Ret );
+               }
+    } while( !done );
+
+    //fprintf( stderr, "About to overread the socket: %d\n", 
+    //      recv( Socket, outpath, sizeof(outpath), 0 ) );
+    fprintf( stderr, "Last error: %d\n", WSAGetLastError() );
+
+    if( f ) fclose( f );
+}
+
+//74.125.224.112 80 / index.html
+
+int main( int argc, char **argv )
+{
+    WSADATA wdata;
+    BOOLEAN got_header = FALSE;
+    MSG msg;
+    INT nbio = 1;
+    sockaddr_in sa = { AF_INET };
+
+    WSAStartup( 0x0101, &wdata );
+
+    if( argc < 5 )
+       {
+               fprintf( stderr, "usage: %s host port path\n", argv[0]);
+               return 1;
+    }
+
+    sa.sin_addr.s_addr = inet_addr( argv[1] );
+    sa.sin_port = htons( atoi( argv[2] ) );
+
+    sprintf( towrite, "GET %s HTTP/1.0\r\n\r\n", argv[3] );
+    strcpy( outpath, argv[4] );
+
+    Socket = socket( AF_INET, SOCK_STREAM, 0 );
+
+    if( ioctlsocket( Socket, FIONBIO, (ULONG *)&nbio ) )
+       {
+               fprintf( stderr, "ioctlsocket: %d\n", WSAGetLastError() );
+               return 1;
+    }
+
+       thread_handle = CreateThread( NULL, 
+                                 0, 
+                                 (LPTHREAD_START_ROUTINE)thread, 
+                                 NULL, 
+                                 0, 
+                                 &thread_id );
+
+    fprintf( stderr, "connecting\n" );
+    connect( Socket, (struct sockaddr *)&sa, sizeof(sa) );
+
+    WaitForSingleObject( thread_handle, INFINITE );
+       
+       fprintf( stderr, "closing socket\n" );
+    closesocket( Socket );
+
+    WSACleanup();
+
+    return 0;
+}
+

Propchange: branches/GSoC_2011/TcpIpDriver/tests/simplesocket/selecttest.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: branches/GSoC_2011/TcpIpDriver/tests/simplesocket/selecttest.cpp
------------------------------------------------------------------------------
    svn:mime-type = text/

Added: branches/GSoC_2011/TcpIpDriver/tests/simplesocket/server_select.c
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/TcpIpDriver/tests/simplesocket/server_select.c?rev=52525&view=auto
==============================================================================
--- branches/GSoC_2011/TcpIpDriver/tests/simplesocket/server_select.c (added)
+++ branches/GSoC_2011/TcpIpDriver/tests/simplesocket/server_select.c 
[iso-8859-1] Sun Jul  3 22:54:55 2011
@@ -1,0 +1,136 @@
+#include <winsock2.h>
+#include <windows.h>
+#include <stdio.h>
+#include <string.h>
+
+#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;
+}

Propchange: branches/GSoC_2011/TcpIpDriver/tests/simplesocket/server_select.c
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: branches/GSoC_2011/TcpIpDriver/tests/simplesocket/server_select.c
------------------------------------------------------------------------------
    svn:mime-type = text/


Reply via email to