записывать вызовы функций из нескольких потоков в один и тот же сокет
это безопасно ? Хотели ли мы добавить между ними синхронизацию? Будет ли это вызывать такие проблемы, как отложенная запись / чтение приложения с сетевого уровня на уровень приложения
Мы используем библиотеки GNU C ++ GCC 4 в среде Linux Redhat.
Это процесс на стороне сервера, при котором между сервером и клиентом имеется только 1 сокет, а клиент находится на двух разных машинах. Данные отправляются с сервера на клиент.
Проблема 1 - когда сервер отправляет данные на сторону клиента (несколько потоков записывают данные на сторону клиента через один и тот же единственный сокет), но данные, записанные из некоторых потоков, не переходят на сторону клиента, они даже не переходят на сетевой уровень того же машина (у Tcpdump нет этих данных)
Проблема 2 - когда клиент отправляет данные на сервер. Данные, отправленные клиентом, отображаются в TCPdump сервера, который не получен для серверного приложения, которое выполняет чтение из сокета из одного потока с использованием функций «чтения» и «выбора» в цикле.
Нам не удалось определить схему возникновения этих проблем. Мы думаем, что это произошло, когда в один и тот же сокет записывается так много потоков. Мы не выполняем синхронизируемую функцию записи, надеясь, что ОС обрабатывает синхронизацию.
write
, не определяется автоматически. - person Kerrek SB   schedule 02.07.2012