int main(int argc, const char *argv[]) { fd_set allreads; fd_set readmask; int socket = 0; int rc = 0; RingBuffer *in_rb = RingBuffer_create(1024 * 10); RingBuffer *sock_rb = RingBuffer_create(1024 * 10); check(argc == 3, "USAGE: netclient HOST PORT"); socket = client_connect(argv[1], argv[2]); check(socket >= 0, "Connect to %s:%s failed.", argv[1], argv[2]); FD_ZERO(&allreads); FD_SET(socket, &allreads); FD_SET(0, &allreads); while(1) { readmask = allreads; rc = select(socket + 1, &readmask, NULL, NULL, NULL); check(rc >= 0, "Select failed"); if(FD_ISSET(0, &readmask)) { rc = read_some(in_rb, 0, 0); check_debug(rc != -1, "failed to read from stdin."); } if(FD_ISSET(socket, &readmask)) { rc = read_some(sock_rb, socket, 0); check_debug(rc != -1, "failed to read from socket."); } while(!RingBuffer_empty(sock_rb)) { rc = write_some(sock_rb, 1, 0); check_debug(rc != -1, "failed to write to stdout."); } while(!RingBuffer_empty(in_rb)) { rc = write_some(in_rb, socket, 1); check_debug(rc != -1, "failed to write to socket."); } } RingBuffer_destroy(in_rb); RingBuffer_destroy(sock_rb); return 0; error: return -1; }
void free_fd_state(struct fd_state *state) { event_free(state->read_event); event_free(state->write_event); RingBuffer_destroy(state->buffer); List_destroy(state->outputs); rtmp_destroy(state->rtmp); free(state); }
char *test_destroy() { RingBuffer_destroy(buffer); return NULL; }