Например есть сокет A которой уже присоединён к другому сокету Б. При этом важно коннект шёл от А к Б. есть сокет В, вопрос, сможет ли он присоединиться к сокету А? спрашиваю просто потому что самому лень писать целых три программы чтобы смоделировать подобный случай
Нет, потому что нельзя выполнить listen() на уже подключённом сокете (о чём, между прочим, сказано в документации, которую, конечно же, никто не читает). Но даже если теоретически предположить, что это возможно, то возникает архитектурный вопрос: какую информацию должна возвращать функция getpeername() для сокета А, учитывая, что у него теперь два связанных с ним удалённых адреса (адрес Б и адрес В)? Для моделировании этой ситуации достаточно одного приложения.
Я дико извиняюсь, но если речь идет о модели беркли, разве установка соединения не порождает новый сокет?
Не знаю, о какой модели идёт речь в данной теме, но если говорить о Windows, то просто не получится сделать listen() или accept() для сокета, который уже присоединён. Т.е. ещё до того, как будет возможно принять соединение, приложение должно создать некий сокет, который не будет принимать никаких данных и который будет использоваться исключительно в режиме "сервер". А насчёт getpeername() это да, это я прогнал немного - забыл, что там новый сокет создаётся для входящего соединения.