|
@@ -187,9 +187,6 @@ SctpTransport::SctpTransport(shared_ptr<Transport> lower, const Configuration &c
|
|
|
|
|
|
PLOG_DEBUG << "Initializing SCTP transport";
|
|
PLOG_DEBUG << "Initializing SCTP transport";
|
|
|
|
|
|
- usrsctp_register_address(this);
|
|
|
|
- Instances->insert(this);
|
|
|
|
-
|
|
|
|
mSock = usrsctp_socket(AF_CONN, SOCK_STREAM, IPPROTO_SCTP, nullptr, nullptr, 0, nullptr);
|
|
mSock = usrsctp_socket(AF_CONN, SOCK_STREAM, IPPROTO_SCTP, nullptr, nullptr, 0, nullptr);
|
|
if (!mSock)
|
|
if (!mSock)
|
|
throw std::runtime_error("Could not create SCTP socket, errno=" + std::to_string(errno));
|
|
throw std::runtime_error("Could not create SCTP socket, errno=" + std::to_string(errno));
|
|
@@ -323,14 +320,14 @@ SctpTransport::SctpTransport(shared_ptr<Transport> lower, const Configuration &c
|
|
if (usrsctp_setsockopt(mSock, SOL_SOCKET, SO_SNDBUF, &sndBuf, sizeof(sndBuf)))
|
|
if (usrsctp_setsockopt(mSock, SOL_SOCKET, SO_SNDBUF, &sndBuf, sizeof(sndBuf)))
|
|
throw std::runtime_error("Could not set SCTP send buffer size, errno=" +
|
|
throw std::runtime_error("Could not set SCTP send buffer size, errno=" +
|
|
std::to_string(errno));
|
|
std::to_string(errno));
|
|
|
|
+
|
|
|
|
+ usrsctp_register_address(this);
|
|
|
|
+ Instances->insert(this);
|
|
}
|
|
}
|
|
|
|
|
|
SctpTransport::~SctpTransport() {
|
|
SctpTransport::~SctpTransport() {
|
|
stop();
|
|
stop();
|
|
close();
|
|
close();
|
|
-
|
|
|
|
- usrsctp_deregister_address(this);
|
|
|
|
- Instances->erase(this);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
void SctpTransport::start() {
|
|
void SctpTransport::start() {
|
|
@@ -355,14 +352,6 @@ bool SctpTransport::stop() {
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
-void SctpTransport::close() {
|
|
|
|
- if (mSock) {
|
|
|
|
- mProcessor.join();
|
|
|
|
- usrsctp_close(mSock);
|
|
|
|
- mSock = nullptr;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
struct sockaddr_conn SctpTransport::getSockAddrConn(uint16_t port) {
|
|
struct sockaddr_conn SctpTransport::getSockAddrConn(uint16_t port) {
|
|
struct sockaddr_conn sconn = {};
|
|
struct sockaddr_conn sconn = {};
|
|
sconn.sconn_family = AF_CONN;
|
|
sconn.sconn_family = AF_CONN;
|
|
@@ -412,6 +401,18 @@ void SctpTransport::shutdown() {
|
|
mWrittenCondition.notify_all();
|
|
mWrittenCondition.notify_all();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void SctpTransport::close() {
|
|
|
|
+ if (!mSock)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ usrsctp_deregister_address(this);
|
|
|
|
+ Instances->erase(this);
|
|
|
|
+
|
|
|
|
+ mProcessor.join();
|
|
|
|
+ usrsctp_close(mSock);
|
|
|
|
+ mSock = nullptr;
|
|
|
|
+}
|
|
|
|
+
|
|
bool SctpTransport::send(message_ptr message) {
|
|
bool SctpTransport::send(message_ptr message) {
|
|
std::lock_guard lock(mSendMutex);
|
|
std::lock_guard lock(mSendMutex);
|
|
|
|
|