В моей программе на VC++(клиент) есть необходимость N раз выполнить соединение используя один и тот же дескриптор сокета(Важно именно так). Клиент коннектится к серверу (оба используют некий прикладной протокол) на стороне сервера выполняется определенная проверка, в случае отрицательного результата необходимо снова подключиться используя один и тот же уже открытый сокет и т.д. Так вот - как мне разорвать соединение не закрывая сокета - а потом как ни в чем не бывало снова подключится к этому же серверу используя тот же декриптор сокета? Чувствую что туплю, но где именно уже не могу понять.... Сори завтыкал - не в ту ветку форума
скарен пишешь?) ну та на тот же nmap посмотри есть много методов там нужно опции сокета выставлять не все системы поддерживают
Короче продолжаем падать...Как выяснилось разрывать соединение не так уж обязательно - сервер после неудачной попытки и сам отрубает его - это видно. Однако при повторном коннекте WSAGetLastError() вертает 10056 хотя никакого соединения нет уж давно(хоть с shutdown хоть без). Не совсем, но суть как видно почти та же. Nmap это мысль, к сожалению этот клиент под win поэтому многоие вкусности setsockopt мне не доступны
Можно посмотреть в nginx, там точно это ипользуется, но как там сделано #if defined (_WIN32) - я хз, ибо порипано. В конце концов, можно самому легко протестить, я как-то проверял, но уже не помню ничерта чем дело закончилось (тут в форуме где-то было, можно посёчить), насколько помню, реюзать сокеты под Windows нельзя.
dimm А если сервер ответ клиенту отправит .... типа "psholvon" или "gutday" ? Это не будет решением для клиента, что дальше делать?
я вот что думаю а нельзя ли продуплицировать дескриптор сокета перед коннектом, и в случае неудачи вернутся к оригинальному(или это бред?).