#include #include #include #include #include #include #include #include #include #include #include #include #include #include struct scot_stream_pool * con_pool; struct scot_socket * sock; struct scot_socket * con_sock; void on_exit_func (void) { scot_stream_pool_free (con_pool); if (con_sock != NULL) scot_socket_free (con_sock); scot_socket_free (sock); scot_socket_fini (); exc_end (); } void exit_func (int inum) { exit (0); } unsigned short stream_read_cb (struct scot_event * _e) { SSIZE_T i, n; char puffer[1024] = ""; struct scot_stream_pool_event * e = (struct scot_stream_pool_event *) _e; n = scot_stream_read (e->st, puffer, 1024); if (puffer [0] == 'q') { scot_stream_close (e->st); return SCOT_EVENT_END; } printf ("Server: "); for (i=0; i> 8), ((struct scot_event_listener *) con_pool)->group); fflush (stdout); scot_event_listener_register_cb ( (struct scot_event_listener *) con_pool, SCOT_EVENT_STREAM_POOL_READ, stream_read_cb, NULL); scot_event_listener_start ((struct scot_event_listener *) con_pool); } CATCH (ee) { print_all_exceptions (ee); exit (EXIT_FAILURE); } TRY { sock = scot_socket_in_new ("tcp", "7777"); scot_socket_listen (sock); } CATCH (ee) { exception_t *e; while (e = retrive_exception (ee)) { print_exception (e); if (EXC_IN_THIS_TRY (e)) { switch (exc_errnum_get (e)) { case SCOT_SOCKET_LISTEN_FAIL: scot_socket_free (sock); case SCOT_SOCKET_NEW_FAIL: break; } } free_exception (e); } free_catched (ee); } TRY { while ((con_sock = scot_socket_accept (sock)) >= 0) { struct scot_stream * sock_stream; int i, n; char puffer [1024]; sock_stream = (struct scot_stream *) con_sock; scot_stream_pool_add ( con_pool, sock_stream, SCOT_STREAM_POOL_FD_ADD_RMASK); con_sock = NULL; } } CATCH (ee) { exception_t *e; while (e = retrive_exception (ee)) { print_exception (e); free_exception (e); } free_catched (ee); } scot_socket_free (sock); scot_event_listener_stop ((struct scot_event_listener *) con_pool); scot_stream_pool_free (con_pool); return 0; }