我在SCTP的两个RPM软件包下运行。 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来解决内核 2.6.32 的 SCTP 中的"地址已在使用"错误。
我了解到下面的代码片段可以帮助添加SO_REUSEADDR但我不知道在哪里/如何添加代码:
int on = 1;
...
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof on);
bind(s, (struct sockaddr *) &sin, sizeof sin);
我没有接受过套接字编程方面的教育,但我正在解决这个问题,因为在端口 3868 上,客户端请求是由远程 java 进程发出的,该进程抛出"地址已在使用中"错误,因为其他一些 TCP 进程将使用相同的端口
了解到下面的代码片段可以帮助添加
SO_REUSEADDR
但我不知道在哪里/如何添加代码
您需要添加 2 行:
int on = 1;
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof on);
在创建带有socket
调用的套接字之后,但在bind
之前。