Socket Timeouts
От: TailWind  
Дата: 21.03.21 20:16
Оценка:
Вопрос_1

Есть у меня класс обёртка над сокетом
У него есть функция Connect

Там я перевожу сокет в не блокирующий режим
Делаю connect
Жду с помощью select

Если не дождался, кидаю Exception

Процедура завершается
Но я передавал в connect указатель на sockaddr_in
Он теперь стал недействительным

А сокет то всё ещё делает connect

Его нужно как-то остановить?
Или он скопировал себе структуру?

Вопрос_2
Как обстоит дело с recv?
Там то я передаю указатель на буфер данных
Вышел я из процедуры через Exception
А он данные получил и запишет их уже по не валидному адресу

Вопрос_3
Слава богу у recv есть встроенный timeout
Который я устанавливаю через setsockopt RCVTIMEO

Но когда я замеряю время через которое вернёт управление reсv
Всегда получается на 500мс больше
Ставлю 3000, получаю 3500
Ставлю 10000, получаю 10500

Что-то делаю не так?

Вопрос_4
Функции с префиксом WSA чем то лучше обычных?
Быстрее?
Или чисто интерфейс другой?
Отредактировано 21.03.2021 20:16 TailWind . Предыдущая версия .
Re: Socket Timeouts
От: reversecode google
Дата: 21.03.21 20:46
Оценка:
любой учебник по сетевому программированию отвечает на все ваши вопросы
а мусолить это +10500 раз на формах не комильфо
Re: Socket Timeouts
От: watchmaker  
Дата: 21.03.21 20:53
Оценка: +2
Здравствуйте, TailWind, Вы писали:

TW>Его нужно как-то остановить?

Нужно только закрыть более ненужный сокет.

TW>Или он скопировал себе структуру?

Системный вызов connect? Да, он уже всё ему нужное скопировал.

TW>Как обстоит дело с recv?

TW>Там то я передаю указатель на буфер данных
TW>Вышел я из процедуры через Exception
TW>А он данные получил и запишет их уже по не валидному адресу
Выходишь ты из функции в момент вызова recv? Очевидно нет!
Функция recv не записывает данные в произвольный момент времени после окончания своей работы. При вызове она копирует уже принятые данные в переданный буфер — это действие выполняется только синхронно.
Re[2]: Socket Timeouts
От: TailWind  
Дата: 21.03.21 23:08
Оценка:
TW>>Или он скопировал себе структуру?
W>Системный вызов connect? Да, он уже всё ему нужное скопировал.

Спасибо большое
Это самое главное, что мне нужно было знать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.