diff --git a/trunk/research/st/srs.c b/trunk/research/st/srs.c index 4fc25988f..017caee9a 100644 --- a/trunk/research/st/srs.c +++ b/trunk/research/st/srs.c @@ -147,6 +147,8 @@ void* io_client(void* arg) return NULL; } + st_netfd_close(stfd); + return NULL; } @@ -211,10 +213,59 @@ int io_test() } srs_trace("9. server io completed."); + st_netfd_close(stfd); + st_netfd_close(client_stfd); + srs_trace("io test: end"); return 0; } +int pipe_test() +{ + srs_trace("==================================================="); + srs_trace("pipe test: start"); + + int fds[2]; + if (pipe(fds) < 0) { + srs_trace("pipe failed"); + return -1; + } + srs_trace("1. pipe ok, %d=>%d", fds[1], fds[0]); + + st_netfd_t fdw; + if ((fdw = st_netfd_open_socket(fds[1])) == NULL) { + srs_trace("st_netfd_open_socket open socket failed."); + return -1; + } + srs_trace("2. open write fd ok"); + + st_netfd_t fdr; + if ((fdr = st_netfd_open_socket(fds[0])) == NULL) { + srs_trace("st_netfd_open_socket open socket failed."); + return -1; + } + srs_trace("3. open read fd ok"); + + char buf[1024]; + if (st_write(fdw, buf, sizeof(buf), ST_UTIME_NO_TIMEOUT) < 0) { + srs_trace("st_write socket failed."); + return -1; + } + srs_trace("4. write to pipe ok"); + + if (st_read(fdr, buf, sizeof(buf), ST_UTIME_NO_TIMEOUT) < 0) { + srs_trace("st_read socket failed."); + return -1; + } + srs_trace("5. read from pipe ok"); + + st_netfd_close(fdw); + st_netfd_close(fdr); + + srs_trace("pipe test: end"); + return 0; +} + int main(int argc, char** argv) { if (st_set_eventsys(ST_EVENTSYS_ALT) < 0) { @@ -237,6 +288,11 @@ int main(int argc, char** argv) return -1; } + if (pipe_test() < 0) { + srs_trace("pipe_test failed"); + return -1; + } + // cleanup. st_thread_exit(NULL);