2017-01-22 7 views
1

Возможно ли в TCP для разных процессов не использовать одно и то же исполняемое изображение (например, нет fork()), чтобы использовать один и тот же порт на стороне клиента в Windows, Linux или OSX? Это связано с опциями сокета SO_REUSEADDR и SO_REUSEPORT с использованием setsockopt() Я верю.TCP - возможно, для одного и того же порта на стороне клиента, который будет использоваться для разных соединений различными приложениями одновременно?

Насколько я читал, я считаю, что для одного и того же процесса/изображения это возможно, но я не нашел информации о нескольких процессах/изображениях. Я бы предположил, что это теоретически возможно, поскольку каждый сокет определяется 5-значным кортежем [IP_PROTO, src_ip: src_port, dst_ip: dst_port]. Поэтому я бы предположил, что до тех пор, пока несколько TCP-соединений, совместно использующих порт на стороне клиента, не будут подключены к одному и тому же dst_ip: dst_port, это теоретически возможно.

ответ

0

UDP не является ориентированным на соединение и не имеет реального различия между клиентом и сервером, поэтому для UDP этот вопрос не имеет большого смысла.

Для TCP вы можете использовать SO_REUSEADDR, чтобы связывать клиентов mulitple с одним и тем же портом, но зачем вам это нужно? Обычно вы оставляете клиента несвязанным до подключения и позволяете ядру выбрать неиспользуемый порт для вас.

+0

Я не хочу, но мне нужно знать, могут ли другие приложения делать это, поскольку я зависим от того, возможно ли это поведение. –

+0

Итак, я должен понять, что это действительно возможно для разных приложений? –

+1

Is * возможно *? Да, если все сокеты в одном порту используют SO_REUSEADDR'/'SO_REUSEPORT'. Возможно ли это? Нет. –

Смежные вопросы