Socket A(local_address);
     void enviar(sockaddr_in remote_address, std::atomic<bool>& quit){
        std::string message_text;
        Message message;
        while(!quit){
           std::getline(std::cin, message_text);
           if (message_text != "/quit"){
               memset(message.text, 0, 1024);
               message_text.copy(message.text, sizeof(message.text) - 1, 0);
               A.send_to(message, remote_address);
           }
           else { 
               quit = true; 
           }
        } 
    }
    void recibir(sockaddr_in local_address, std::atomic<bool>& quit){
        Message messager;
        while(!quit){
            A.receive_from(messager, local_address);
        }
    }
    int main(void){
        std::atomic<bool> quit(false);
        sockaddr_in remote_address = make_ip_address("127.0.0.1",6000);
        std::thread hilorec(&recibir,local_address, std::ref(quit));
        std::thread hiloenv(&enviar,remote_address, std::ref(quit));
        hiloenv.join();
        hilorec.join();
    }
Hi! I'm trying to make a simple chat with sockets. I want the program to finish when I write "/quit". I'm trying this with an atomic bool variable called quit. The problem is when I write "/quit" quit will be 'true' and the hiloenv thread will be finish, but hilorec, which is to receive the messages, will be blocked until i receive a message because of the recvfrom() function. How i can solve this?
Sorry for my english and thanks!