--- sio_test.c 2002/10/23 17:05:10 1.1
+++ sio_test.c 2002/11/05 13:23:36 1.2
@@ -3,44 +3,85 @@
#include "al.h"
#include "sio.h"
-extern sio_module_t sio_module_fd;
+#include "sa.h"
+
+extern sio_module_t sio_module_sa;
+extern sio_module_t sio_module_hello;
extern sio_module_t sio_module_buffer;
#define e(f) rc = f; printf("%s = %s\n",#f, sio_error(rc)); fflush(stdout);
+#define s(f) src = f; printf("%s = %s\n",#f, sa_error(src)); fflush(stdout);
int main(int argc, char *argv[])
{
sio_rc_t rc;
sio_t *sio;
- sio_stage_t *sios_fd, *sios_buffer;
- int fd;
+ sio_stage_t *sios_sa, *sios_hello, *sios_buffer;
+
+ sa_rc_t src;
+ sa_addr_t *saa;
+ sa_t *msa, *sa;
+ char *uri;
+
char buf[] = "Hello world\n";
+
size_t actual;
- size_t buflen = 1000;
+ size_t buflen;
- fd = fileno(stdout);
+ s(sa_create(&msa));
+ s(sa_option(msa, SA_OPTION_REUSEADDR, 1));
- e(sio_create(&sio));
+ s(sa_addr_create(&saa));
+ uri = "inet://localhost:25001#tcp";
+ s(sa_addr_u2a(saa, uri));
+ s(sa_bind(msa,saa));
+ s(sa_addr_destroy(saa));
+ uri = NULL;
+ e(sio_create(&sio));
+ e(sio_create_stage(sio, &sio_module_sa, &sios_sa));
+ e(sio_create_stage(sio, &sio_module_hello, &sios_hello));
e(sio_create_stage(sio, &sio_module_buffer, &sios_buffer));
+
+ buflen = 256;
+ e(sio_configure_stage(sio, sios_sa, "buflen", &buflen));
+
+ buflen = 1000;
e(sio_configure_stage(sio, sios_buffer, "outputsize", &buflen));
- e(sio_create_stage(sio, &sio_module_fd, &sios_fd));
- e(sio_configure_stage(sio, sios_fd, "fd", &fd));
- e(sio_attach(sio, sios_buffer, SIO_MODE_WRITE));
- e(sio_attach(sio, sios_fd, SIO_MODE_WRITE));
+ s(sa_listen(msa, 5));
+
+ for(;;) {
+
+ s(sa_accept(msa, &saa, &sa));
+ s(sa_addr_a2u(saa, &uri));
+ printf("Connection from %s\n",uri);
+ s(sa_addr_destroy(saa));
+
+ e(sio_configure_stage(sio, sios_sa, "sa", sa));
- e(sio_write(sio, buf, sizeof(buf)-1, &actual));
+ e(sio_attach(sio, sios_buffer, SIO_MODE_WRITE));
+ e(sio_attach(sio, sios_hello, SIO_MODE_READWRITE));
+ e(sio_attach(sio, sios_sa, SIO_MODE_READWRITE));
- e(sio_push(sio));
+ e(sio_write(sio, buf, sizeof(buf)-1, &actual));
+ e(sio_push(sio));
+
+ e(sio_detach(sio, sios_sa));
+ e(sio_detach(sio, sios_hello));
+ e(sio_detach(sio, sios_buffer));
+
+ sa_destroy(sa);
+ }
- e(sio_detach(sio, sios_fd));
- e(sio_detach(sio, sios_buffer));
- e(sio_destroy_stage(sio, sios_fd));
e(sio_destroy_stage(sio, sios_buffer));
+ e(sio_destroy_stage(sio, sios_hello));
+ e(sio_destroy_stage(sio, sios_sa));
e(sio_destroy(sio));
+ sa_destroy(msa);
+
return 0;
}
|