Сокеты клиент-сервера - неблокирующий ввод / вывод - PullRequest
0 голосов
/ 25 августа 2018

Я не могу понять, как сделать неблокирующий ввод / вывод.Это моя текущая архитектура:

Сервер

  • Создать сокет сервера (socket())
  • bind() для IP на номер порта
  • listen() для входящих соединений
  • Ввести while(1) loop {
    • accept() входящее соединение
    • Создать (fork()) нового потомкапроцесс для обработки recv() ing и send() ing

Клиент

  • Создание клиентского сокета (socket())
  • connect() сокет клиента к сокету сервера
  • Введите while(1) loop {
    • pipe(), чтобы создать дескрипторы файлов канала для родительских и дочерних процессов
    • Чтение пользовательского ввода из stdin ( ВСЕГДА доступно, т.е. не блокируется)
      • Spawn (fork()) новый дочерний процесс для обработки пользовательского ввода, send() ing и recv() вход в серверный сокет и из него
      • Как только выход дочернего процесса готов, write() для родительского
    • parent read() выходное сообщение от дочернего процессаи распечатать на терминал без блокировки стандартного ввода

Что мне нужно изменить?Я просто хочу иметь возможность вводить сообщение в терминал client , чтобы дочерний процесс клиента связывался с сервером в фоновом режиме, форматировал вывод и все, а затем, как только был готов к выводу, он просто выводилне блокируя меня от ввода большего количества запросов в клиент терминал.

Например, если бы я попросил терминал спать 10 секунд, а затем вернул "Я не сплю!"после того времени прошло.В то же время я мог бы обрабатывать другие запросы без ожидания терминала client .

Enter a command: sleep 10
Enter a command: sendfile text.txt
Enter a command: echo money
money
Enter a command: echo hello
hello
I'm awake!
Enter a command: 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...