Одновременное чтение и отправка данных через один сокет
От:
Аноним
Дата:
02.07.13 10:07
Оценка:
Такой вопрос.
Делаю клиентское приложение на C++, которое общается через TCP через сокеты с сервером. Приложение может как получать сообщения, так и слушать. Соответственно вопрос — можно ли через один сокет в двух потоках это сделать. Т.е. в одном потоке у меня будет resv (слушается не пришло ли что-то от сервера). А в другом потоке я буду делать send, если есть что отправить. И если так можно делать, нужна ли синхронизация какая-нибудь именно обращений к сокетам?
Resv и send свой поток блокируют пока не завершаться успешно.
Re: Одновременное чтение и отправка данных через один сокет
Здравствуйте, Аноним, Вы писали:
А>Такой вопрос.
А>Делаю клиентское приложение на C++, которое общается через TCP через сокеты с сервером. Приложение может как получать сообщения, так и слушать. Соответственно вопрос — можно ли через один сокет в двух потоках это сделать. Т.е. в одном потоке у меня будет resv (слушается не пришло ли что-то от сервера). А в другом потоке я буду делать send, если есть что отправить. И если так можно делать, нужна ли синхронизация какая-нибудь именно обращений к сокетам?
можно. синхронизация доступа к сокету не нужна
In Zen We Trust
Re: Одновременное чтение и отправка данных через один сокет
Здравствуйте, Аноним, Вы писали:
А>Делаю клиентское приложение на C++, которое общается через TCP через сокеты с сервером. Приложение может как получать сообщения, так и слушать. Соответственно вопрос — можно ли через один сокет в двух потоках это сделать. Т.е. в одном потоке у меня будет resv (слушается не пришло ли что-то от сервера). А в другом потоке я буду делать send, если есть что отправить. И если так можно делать, нужна ли синхронизация какая-нибудь именно обращений к сокетам?
Можно... Синхронизация не нужна, как уже сказали.
А>Resv и send свой поток блокируют пока не завершаться успешно.
Только учтите, что send не блокирует поток. Процедура только копирует данные во внутренний буфер и все. Возврат из send'а не гарантирует получение данных получателем.