Ejemplo n.º 1
0
void *pthread_body_writer(void *_pi)
{
    struct pthread_info *pi = _pi;

    LOG("id=%p, from_fd=%d, to_fd=%d, name=%s\r\n",
            pi->id, pi->from_fd, pi->to_fd, pi->name);
    pass_data(pi);
    return NULL;
} /* pthread_body_writer */
Ejemplo n.º 2
0
Archivo: tcp.cpp Proyecto: oldhu/rproxy
void* tcp_server_handler(void* arg)
{
    tcp_server_thread_info* pinfo = (tcp_server_thread_info *)arg;
    int printer_socket = tcp_connect_to_printer(pinfo->printer, pinfo->printer_port);

    fd_set sockets;
    timeval tv;

    int maxfd = pinfo->accepted_socket > printer_socket ? pinfo->accepted_socket : printer_socket;
    maxfd += 1;

    int running = 1;

    int total_bytes = 0;

    while (running) {
        FD_ZERO(&sockets);
        FD_SET(pinfo->accepted_socket, &sockets);
        FD_SET(printer_socket, &sockets);

        tv.tv_sec = 3;
        tv.tv_usec = 0;
        

        switch(select(maxfd, &sockets, NULL, NULL, &tv)) {
            case -1:
                printf("error in select.\n");
                exit(1);
            case 0:
                printf("no data.\n");
                break;
            default:
                int from = pinfo->accepted_socket;
                int to = printer_socket;
                if (FD_ISSET(printer_socket, &sockets)) {
                    from = printer_socket;
                    to = pinfo->accepted_socket;
                }
                int err = test_socket(from);
                if (err <= 0 and errno != EAGAIN) {
                    printf("client socket closed.\n");
                    running = 0;
                    break;
                }
                total_bytes += pass_data(from, to);
        }
    }

    printf("thread exit. passed %d bytes in this session.\n", total_bytes);

    close(printer_socket);

    delete pinfo;
}
Ejemplo n.º 3
0
void *pthread_body_reader(void *_pi)
{
    struct pthread_info *pi = _pi;

    LOG("id=%p, from_fd=%d, to_fd=%d, name=%s\r\n",
            pi->id, pi->from_fd, pi->to_fd, pi->name);
    pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);

    /* initialize the pty config with the saved one. */
    tcsetattr(ptym, TCSAFLUSH, &saved_tty);

    /* ... and run */
    pass_data(pi);

    return NULL;
} /* pthread_body_reader */