Создание сокета внутри потока C ++ - PullRequest
0 голосов
/ 27 октября 2019

Мне предложили решить проблему ... вот как это происходит:

Мне нужно написать две программы, клиентскую и серверную.

Моя клиентская программа собираетсявыполнить некоторую тривиальную задачу X, которая создает очередь размера N.

Затем клиентская программа создаст N потоков, и каждый из этих дочерних потоков создаст сокет и отправит некоторую информацию, относящуюся к X, на сервер. .

Затем сервер получает эту информацию от клиента и создает дочерние процессы для дальнейшей обработки этой информации и отправляет ее обратно клиенту.

Мой главный вопрос заключается в том, как приступить к созданиюсокет ВНУТРИ потока.

#include <pthread.h>
#include <stdio.h>

#define NTHREADS 5

void *process_X(void *x_void_ptr)
{
    //random
    //do i create the socket here?
    return NULL;
}

int main()
{
static int x = 0;
pthread_t tid[NTHREADS];

for(int i=0;i<NTHREADS;i++)
{
    if(pthread_create(&tid[i], NULL, inc_x, &x)) 
    {
        fprintf(stderr, "Error creating thread\n");
        return 1;

    }       
}
// Wait for the other threads to finish.
 for (int i = 0; i < NTHREADS; i++)
        pthread_join(tid[i], NULL);
 return 0;
}

Кроме того, в информации, которую мне дали о создании сокетов, я буду вводить имя хоста и номер порта из командной строки. Поэтому мне нужно будет также использовать argv [], поэтому я не знаю, как это сделать, если его не будет в основной функции.

Любая помощь очень ценится ...

1 Ответ

3 голосов
/ 27 октября 2019

Мой главный вопрос - как создать сокет ВНУТРИ потока.

Все в вашей функции process_X происходит в новом потоке. Итак, вы действительно создаете сокет, где ваш комментарий указывает.

Так что мне нужно будет использовать argv [], поэтому я не знаю, как это сделать, если его не будет в основной функции.

Последний параметр pthread_create передается в process_X, то есть x_void_ptr. Вы можете просто привести x_void_ptr к тому типу, который вам нужен.

Я предлагаю проанализировать аргументы CLI в вашей функции main и расположить данные в struct, который затем передается в process_X через pthread_create.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...