This all started around October 21, so I have been working on this for around 6 weeks (with some interruptions and distractions).
Today I got a read functionality working (as tcp_recv()), which along with connect() finishes off my first tier list of what I wanted to accomplish. It allowed me to code up this ECHO server to run within Kyu. And it works!!
#define ECHO_PORT 113
static void
run_echo ( struct socket *so )
{
char msg[128];
int n;
for ( ;; ) {
n = tcp_recv ( so, msg, 128 );
if ( n == 0 ) {
thr_delay ( 1 );
continue;
}
tcp_send ( so, msg, n );
if ( msg[0] == 'q' )
break;
}
strcpy ( msg, "All Done\n" );
tcp_send ( so, msg, strlen(msg) );
}
void
echo_thread ( long xxx )
{
struct socket *so;
struct socket *cso;
int fip;
so = tcp_bind ( ECHO_PORT );
for ( ;; ) {
cso = tcp_accept ( so );
fip = tcp_getpeer_ip ( cso );
printf ( "echo server got a connection from: %s\n", ip2str32_h(fip) );
/* Really shoud run this in new thread */
run_echo ( cso );
(void) soclose ( cso );
}
}
void
bsd_test_echo ( long xxx )
{
(void) safe_thr_new ( "echo-server", echo_thread, (void *) 0, 15, 0 );
}
Kyu / tom@mmto.org