Меня интересует есть ли какая возможность запустить два WinSock сервера на одной машине на одном порту, то есть одинаковые копии, если это реально, то сколько максимум возможно запустить таких копий?
Так как все провайдеры транспорта — IFS, то сокеты представляют из себя хэндлы на драйвера устройств режима ядра (\Device\RawIp, \Device\Tcp, \Device\Udp, \Device\Ip, \Device\Afd, ...). Явного запрета на DuplicateHandle нет (более того, у всех провайдеров есть даже WSPDuplicateSocket), однако реализация сопутствующих структур (например, указатель на сокетные данные на NT хранится в ТEB-е и они даже не синхронизируются для разных потоков) может обнажить весьма заметные грабли от системы к системе.
V>Так как все провайдеры транспорта — IFS, то сокеты представляют из себя хэндлы на драйвера устройств режима ядра (\Device\RawIp, \Device\Tcp, \Device\Udp, \Device\Ip, \Device\Afd, ...). Явного запрета на DuplicateHandle нет (более того, у всех провайдеров есть даже WSPDuplicateSocket), однако реализация сопутствующих структур (например, указатель на сокетные данные на NT хранится в ТEB-е и они даже не синхронизируются для разных потоков) может обнажить весьма заметные грабли от системы к системе.
Помоему вопрос был про работу на одном порту, а не одном сокете.
Можно ведь bind'у скормить SO_REUSEADDR, сокеты будут разные, а порт — один
Или я не прав?
Re[3]: Два WinSock Server на одном порту. Возможно ?
Здравствуйте, trial, Вы писали:
T>Помоему вопрос был про работу на одном порту, а не одном сокете.
Открытие сокета на определенном порту, формально, является открытием хэндла на девайс.
То есть, теоретически, можно вообще ничего не открывая, писать в чужой сокет из чужого процесса.
Здравствуйте, tararasyk, Вы писали:
T>а не подскажите как правильно вызвать ф-цию(синтасис) bind вместе с SO_REUSEADDR чтоб сокеты были разные, а порт — один ?
имелся в вижу не bind а setsockopt...
а у неё параметр есть — optval, в него и надо поместить...