Как отредактировать sctp.h, чтобы добавить SO_REUSEADDR

Я использую два пакета RPM для SCTP. lksctp-tools-1.0.11 lksctp-tools-devel-1.0.11

Мой заголовочный файл для sctp находится в /usr/include/netinet/sctp.h, в котором есть метод привязки, но нет метода прослушивания.

int sctp_bindx(int sd, struct sockaddr *addrs, int addrcnt, int flags);

int sctp_connectx(int sd, struct sockaddr *addrs, int addrcnt,
                  sctp_assoc_t *id);

int sctp_peeloff(int sd, sctp_assoc_t assoc_id);

/* Prototype for the library function sctp_opt_info defined in
 * API 7. Socket Options.
 */
int sctp_opt_info(int sd, sctp_assoc_t id, int opt, void *arg, socklen_t *size);

Я хочу использовать SO_REUSEADDR в этом коде для устранения ошибки «Адрес уже используется» в SCTP для ядра 2.6.32.

Я узнал, что приведенный ниже фрагмент может помочь в добавлении SO_REUSEADDR, но я не знаю, где и как добавить в код:

int on = 1;
...
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof on);
bind(s, (struct sockaddr *) &sin, sizeof sin);

Я не разбираюсь в программировании сокетов, но я решаю эту проблему, потому что на порту 3868 клиентский запрос выполняется удаленным процессом Java, который выдает ошибку «Адрес уже используется», поскольку какой-то другой процесс TCP будет использовать тот же порт


person parpande    schedule 02.12.2019    source источник


Ответы (1)


Я узнал, что приведенный ниже фрагмент может помочь в добавлении SO_REUSEADDR, но я не знаю, где и как добавить в код

Вам нужно добавить 2 строки:

int on = 1;
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof on);

после создания сокета с вызовом socket, но до bind.

person Maxim Egorushkin    schedule 02.12.2019
comment
Я добавил код в файл sctp.h, но не смог найти, находится ли вызов сокета в этом файле. Я мог найти привязку, но не вызов «сокета» для создания сокета. Возможно ли, что вызов сокета должен быть создан в каком-то другом заголовке файл. У меня есть несколько файлов в /usr/include/netinet - person parpande; 09.01.2020