Установка номера исходящего порта сокета в ядре Linux

Я пытаюсь интегрировать многопутевой tcp (https://www.multipath-tcp.org/) в проект, и я хотел бы изменить исходный код, чтобы вручную выбрать порт исходящего сокета для нового подпотока mptcp, чтобы я мог идентифицировать входящие и исходящие пакеты в моем приложении.

Адрес создается с помощью:

inet_create(sock_net(meta_sk), &sock, IPPROTO_TCP, 1);

и связаны:

sock.ops->bind(&sock, (struct sockaddr *)&loc_in, sizeof(struct sockaddr_in));

а потом подключил:

sock.ops->connect(&sock, (struct sockaddr *)&rem_in,
            sizeof(struct sockaddr_in), O_NONBLOCK);

У меня такой вопрос: как я могу вручную установить исходящий порт сокета на уровне ядра и / или где установлен порт в этой последовательности вызовов, чтобы я мог его изменить?


person BeefSupreme    schedule 05.07.2016    source источник


Ответы (1)


Вы должны установить исходящий порт в структуре loc_in, которую вы используете для bind() сокета, на локальный адаптер / интерфейс, например:

struct sockaddr_in loc_in;
loc_in.sin_family = AF_INET;

// desired port...
loc_in.sin_port = htons(...);

// IP of desired adapter to connect() from...
loc_in.sin_addr.s_addr = inet_addr("...");
person 4pie0    schedule 05.07.2016
comment
Спасибо! Именно то, что мне нужно. - person BeefSupreme; 06.07.2016