UNIX: разработка сетевых приложений
Шрифт:
Обратите также внимание на то, что главный поток не закрывает присоединенный сокет, что всегда происходило, когда параллельный сервер вызывал функцию
В этой программе имеется одна неявная ошибка, о которой рассказывается в разделе 26.5. Можете ли вы ее
Передача аргументов новым потокам
Мы уже упомянули, что в листинге 26.2 мы преобразуем целочисленную переменную
В первую очередь, заметим, что мы не можем просто передать адрес
С точки зрения ANSI С здесь все в порядке: мы гарантированно можем преобразовать целочисленный указатель к типу
В главном потоке имеется одна целочисленная переменная
Функция
Создается новый поток, и начинает выполняться функция
Готово другое соединение, и главный поток снова начинает выполняться (прежде, чем начнется выполнение вновь созданного потока). Завершается функция
Хотя созданы два новых потока, оба они будут работать с одним и тем же последним значением переменной
В листинге 26.3 показано более удачное решение описанной проблемы.
Листинг 26.3. Эхо-сервер TCP, использующий потоки с более переносимой передачей аргументов
- Telegram
- Viber
- Skype
- ВКонтакте