C-Сокеты Unix - Неблокирующее чтение

Я пытаюсь создать простую программу чата клиент-сервер. На стороне клиента я отключаю другой поток для чтения любых входящих данных с сервера. Проблема в том, что я хочу корректно завершить этот второй поток, когда человек выходит из основного потока. Я пытался использовать общую переменную "running" для завершения, проблема в том, что команда socket read () является командой блокировки, поэтому, если я это сделаю while (running == 1), сервер должен отправить что-то до того, как чтение вернется и условие while можно проверить снова. Я ищу метод (только с общими сокетами unix) для неблокирующего чтения, в основном подойдет какая-то форма peek (), поскольку я могу постоянно проверять цикл, чтобы увидеть, закончил ли я.

Цикл потока чтения ниже, прямо сейчас в нем нет мьютексов для общих переменных, но я планирую добавить это позже, не волнуйтесь! ;)

void *serverlisten(void *vargp)
{
    while(running == 1)
    {
        read(socket, readbuffer, sizeof(readbuffer));
        printf("CLIENT RECIEVED: %s\n", readbuffer);
    }
    pthread_exit(NULL);
}
5
задан will 12 November 2011 в 20:18
поделиться