Одновременное чтение и отправка данных через один сокет
От: Аноним  
Дата: 02.07.13 10:07
Оценка:
Такой вопрос.

Делаю клиентское приложение на C++, которое общается через TCP через сокеты с сервером. Приложение может как получать сообщения, так и слушать. Соответственно вопрос — можно ли через один сокет в двух потоках это сделать. Т.е. в одном потоке у меня будет resv (слушается не пришло ли что-то от сервера). А в другом потоке я буду делать send, если есть что отправить. И если так можно делать, нужна ли синхронизация какая-нибудь именно обращений к сокетам?

Resv и send свой поток блокируют пока не завершаться успешно.
Re: Одновременное чтение и отправка данных через один сокет
От: Abyx Россия  
Дата: 02.07.13 10:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Такой вопрос.


А>Делаю клиентское приложение на C++, которое общается через TCP через сокеты с сервером. Приложение может как получать сообщения, так и слушать. Соответственно вопрос — можно ли через один сокет в двух потоках это сделать. Т.е. в одном потоке у меня будет resv (слушается не пришло ли что-то от сервера). А в другом потоке я буду делать send, если есть что отправить. И если так можно делать, нужна ли синхронизация какая-нибудь именно обращений к сокетам?


можно. синхронизация доступа к сокету не нужна
In Zen We Trust
Re: Одновременное чтение и отправка данных через один сокет
От: Nikolay_Ch Россия  
Дата: 02.07.13 20:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Делаю клиентское приложение на C++, которое общается через TCP через сокеты с сервером. Приложение может как получать сообщения, так и слушать. Соответственно вопрос — можно ли через один сокет в двух потоках это сделать. Т.е. в одном потоке у меня будет resv (слушается не пришло ли что-то от сервера). А в другом потоке я буду делать send, если есть что отправить. И если так можно делать, нужна ли синхронизация какая-нибудь именно обращений к сокетам?

Можно... Синхронизация не нужна, как уже сказали.

А>Resv и send свой поток блокируют пока не завершаться успешно.

Только учтите, что send не блокирует поток. Процедура только копирует данные во внутренний буфер и все. Возврат из send'а не гарантирует получение данных получателем.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.