Коннект к сокету который сам присодинился к другому сокету

Тема в разделе "WASM.NETWORKS", создана пользователем rpy3uH, 12 янв 2012.

  1. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    Например есть сокет A которой уже присоединён к другому сокету Б. При этом важно коннект шёл от А к Б.
    есть сокет В, вопрос, сможет ли он присоединиться к сокету А?

    спрашиваю просто потому что самому лень писать целых три программы чтобы смоделировать подобный случай
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Нет, потому что нельзя выполнить listen() на уже подключённом сокете (о чём, между прочим, сказано в документации, которую, конечно же, никто не читает). Но даже если теоретически предположить, что это возможно, то возникает архитектурный вопрос: какую информацию должна возвращать функция getpeername() для сокета А, учитывая, что у него теперь два связанных с ним удалённых адреса (адрес Б и адрес В)?

    Для моделировании этой ситуации достаточно одного приложения.
     
  3. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Я дико извиняюсь, но если речь идет о модели беркли, разве установка соединения не порождает новый сокет?
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Squash
    Установка входящего порождает.
     
  5. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Не знаю, о какой модели идёт речь в данной теме, но если говорить о Windows, то просто не получится сделать listen() или accept() для сокета, который уже присоединён. Т.е. ещё до того, как будет возможно принять соединение, приложение должно создать некий сокет, который не будет принимать никаких данных и который будет использоваться исключительно в режиме "сервер". А насчёт getpeername() это да, это я прогнал немного - забыл, что там новый сокет создаётся для входящего соединения.
     
  6. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    А, точно,
     
  7. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    да точно, всё упирается в listen
     
  8. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    тогда надо создать два сокета с SO_REUSEADDR, на одном слушать, а на другом коннектиться