Семантика функции сокета API - PullRequest
0 голосов
/ 15 февраля 2011

Это основной вопрос. Я завершаю семантику API сокета, как показано ниже.

bind()     - where I am

connect()  - where I want to send message

Если я хочу наложить ограничение на то, чтобы Том и Джерри разговаривали через следующее фиксированное соединение:

Tom's IP:Tom's Port  <-->  Jerry's IP:Jerry's Port

Я должен вызвать bind () с обеих сторон, чтобы установить их соответствующий сокет. Правильно?

И в следующем коде я явно не связывал () с new_socket ,

   new_socket = accept(listen_socket, (struct sockaddr*)&remote_addr, &addr_size);
   send_data(new_socket);
   recv_data(new_socket);

Но когда я отправляю и получаю данные через new_socket, он все еще использует IP-адрес и номер порта, который я связываю () с прослушивающим сокетом. Эта информация неявно копируется системой в new_socket?

Если new_socket и listen_socket связаны с одним и тем же IP-адресом и портом, как система может отличить их друг от друга?

Спасибо!

1 Ответ

1 голос
/ 15 февраля 2011

Если new_socket и listen_socket связаны с одним и тем же IP-адресом и портом, как система может различить их?

Протокол TCP использует кортеж {host-ip, host-port, peer-ip, peer-port} для идентификации соединений.То есть, вы можете иметь много входящих соединений с одной и той же {host-ip, host-port} -part (такой же, как ваш прослушивающий сокет), но с другой {peer-ip, peer-port} -part.При подключении всех ваших исходящих подключений на одном и том же ip порт другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...