Я использую два пакета 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 будет использовать тот же порт