]> git.karo-electronics.de Git - karo-tx-redboot.git/blob - packages/net/lwip_tcpip/v2_0/tests/socket.c
unified MX27, MX25, MX37 trees
[karo-tx-redboot.git] / packages / net / lwip_tcpip / v2_0 / tests / socket.c
1 //==========================================================================
2 //####ECOSGPLCOPYRIGHTBEGIN####
3 // -------------------------------------------
4 // This file is part of eCos, the Embedded Configurable Operating System.
5 // Copyright (C) 2004 eCosCentric 
6 //
7 // eCos is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU General Public License as published by the Free
9 // Software Foundation; either version 2 or (at your option) any later version.
10 //
11 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
12 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 // for more details.
15 //
16 // You should have received a copy of the GNU General Public License along
17 // with eCos; if not, write to the Free Software Foundation, Inc.,
18 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
19 //
20 // As a special exception, if other files instantiate templates or use macros
21 // or inline functions from this file, or you compile this file and link it
22 // with other works to produce a work based on this file, this file does not
23 // by itself cause the resulting work to be covered by the GNU General Public
24 // License. However the source code for this file must still be made available
25 // in accordance with section (3) of the GNU General Public License.
26 //
27 // This exception does not invalidate any other reasons why a work based on
28 // this file might be covered by the GNU General Public License.
29 // -------------------------------------------
30 //####ECOSGPLCOPYRIGHTEND####
31 //==========================================================================
32
33 /* Simple test-case for the BSD socket API  : echo on TCP port 7 */
34
35 #include <lwip/sys.h>
36 #undef LWIP_COMPAT_SOCKETS
37 #define LWIP_COMPAT_SOCKETS 1
38 #include <lwip/sockets.h>
39 #include <lwip/inet.h>
40 #include <cyg/infra/testcase.h>
41
42 #ifdef CYGPKG_LWIP_TCP
43
44 char buf[400];
45 static void
46 socket_thread(void *arg)
47 {
48         int sock,s;
49         int len;
50         struct sockaddr_in addr,rem;
51         sock = socket(AF_INET,SOCK_STREAM,0);   
52         addr.sin_family = AF_INET;
53         addr.sin_port = htons(7);
54         addr.sin_addr.s_addr = INADDR_ANY;
55
56         bind(sock,(struct sockaddr *)&addr,sizeof(addr));
57                         
58         listen(sock,5);
59         while(1) {      
60                 len = sizeof(rem);
61                 s = accept(sock,(struct sockaddr*)&rem,&len);
62                 while((len = read(s,buf,400)) > 0)
63                         write(s,buf,len);
64                 close(s);
65         }       
66 }
67
68 void
69 tmain(cyg_addrword_t p)
70 {
71   lwip_init();  
72   sys_thread_new(socket_thread, (void*)"socket",7);
73 }
74
75 #define STACK_SIZE 0x1000
76 static char stack[STACK_SIZE];
77 static cyg_thread thread_data;
78 static cyg_handle_t thread_handle;
79
80 void
81 socket_main(void)
82 {
83     CYG_TEST_INIT();
84     // Create a main thread, so we can run the scheduler and have time 'pass'
85     cyg_thread_create(10,                // Priority - just a number
86                       tmain,          // entry
87                       0,                 // entry parameter
88                       "socket echo test",        // Name
89                       &stack[0],         // Stack
90                       STACK_SIZE,        // Size
91                       &thread_handle,    // Handle
92                       &thread_data       // Thread data structure
93             );
94     cyg_thread_resume(thread_handle);  // Start it
95     cyg_scheduler_start();
96     CYG_TEST_FAIL_FINISH("Not reached");
97 }
98
99 externC void
100 cyg_start( void )
101 {
102     socket_main();
103 }
104
105 #else // def CYGPKG_LWIP_TCP
106 #define N_A_MSG "TCP support disabled"
107 #endif // def CYGFUN_KERNEL_API_C
108
109 #ifdef N_A_MSG
110 externC void
111 cyg_start( void )
112 {
113     CYG_TEST_INIT();
114     CYG_TEST_NA(N_A_MSG);
115 }
116 #endif // N_A_MSG
117