Beispiel #1
0
void run_server(void)
{
	long i;
	int op_fd;
	int nr_threads;
	pthread_t *p;

	op_fd = init_op_sock_server();
	while(1) {
		nr_threads = recv_op(op_fd);
		p = malloc(sizeof(pthread_t) * nr_threads);
		if (!p) {
			perror("malloc");
			exit(1);
		}

		/* create server worker */
		for (i=0;i<nr_threads;i++) {
			pthread_create(&p[i], NULL, server_work, (void *)i);
		}

		/* assume recieving cancel operation */
		recv_op(op_fd);
		for (i=0;i<nr_threads;i++) {
			pthread_cancel(p[i]);
		}
		for (i=0;i<nr_threads;i++) {
			pthread_join(p[i], NULL);
		}
		/* all workers are finished */

		free(p);
	}
	close(op_fd);
}
Beispiel #2
0
    void connect() {
      if (socket_error || !socket->is_open()) {
        boost::asio::ip::tcp::resolver::query query(host, std::to_string(port));
        boost::asio::connect(*socket, asio_resolver.resolve(query));

        boost::asio::ip::tcp::no_delay option(true);
        socket->set_option(option);

        /* Timeout implementation */
        if (send_timeout > 0) {
          timeout_op send_op(send_timeout, SO_SNDTIMEO);
          socket->set_option(send_op);
        }

        if (recv_timeout > 0) {
          timeout_op recv_op(recv_timeout, SO_RCVTIMEO);
          socket->set_option(recv_op);
        }

        socket_error = false;
      }
    }