Skip to content

Commit f7467a1

Browse files
Merge branch 'v0.17'
2 parents 33bc1b8 + 0b53178 commit f7467a1

File tree

2 files changed

+32
-26
lines changed

2 files changed

+32
-26
lines changed

CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
cmake_minimum_required(VERSION 3.7)
22
project(libdatachannel
3-
VERSION 0.17.5
3+
VERSION 0.17.6
44
LANGUAGES CXX)
55
set(PROJECT_DESCRIPTION "C/C++ WebRTC network library featuring Data Channels, Media Transport, and WebSockets")
66

src/impl/sctptransport.cpp

+31-25
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,6 @@ SctpTransport::SctpTransport(shared_ptr<Transport> lower, const Configuration &c
187187

188188
PLOG_DEBUG << "Initializing SCTP transport";
189189

190-
usrsctp_register_address(this);
191-
Instances->insert(this);
192-
193190
mSock = usrsctp_socket(AF_CONN, SOCK_STREAM, IPPROTO_SCTP, nullptr, nullptr, 0, nullptr);
194191
if (!mSock)
195192
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
323320
if (usrsctp_setsockopt(mSock, SOL_SOCKET, SO_SNDBUF, &sndBuf, sizeof(sndBuf)))
324321
throw std::runtime_error("Could not set SCTP send buffer size, errno=" +
325322
std::to_string(errno));
323+
324+
usrsctp_register_address(this);
325+
Instances->insert(this);
326326
}
327327

328328
SctpTransport::~SctpTransport() {
329329
stop();
330330
close();
331-
332-
usrsctp_deregister_address(this);
333-
Instances->erase(this);
334331
}
335332

336333
void SctpTransport::onBufferedAmount(amount_callback callback) {
@@ -359,14 +356,6 @@ bool SctpTransport::stop() {
359356
return true;
360357
}
361358

362-
void SctpTransport::close() {
363-
if (mSock) {
364-
mProcessor.join();
365-
usrsctp_close(mSock);
366-
mSock = nullptr;
367-
}
368-
}
369-
370359
struct sockaddr_conn SctpTransport::getSockAddrConn(uint16_t port) {
371360
struct sockaddr_conn sconn = {};
372361
sconn.sconn_family = AF_CONN;
@@ -416,6 +405,18 @@ void SctpTransport::shutdown() {
416405
mWrittenCondition.notify_all();
417406
}
418407

408+
void SctpTransport::close() {
409+
if (!mSock)
410+
return;
411+
412+
usrsctp_deregister_address(this);
413+
Instances->erase(this);
414+
415+
mProcessor.join();
416+
usrsctp_close(mSock);
417+
mSock = nullptr;
418+
}
419+
419420
bool SctpTransport::send(message_ptr message) {
420421
std::lock_guard lock(mSendMutex);
421422

@@ -705,21 +706,26 @@ void SctpTransport::sendReset(uint16_t streamId) {
705706
}
706707

707708
void SctpTransport::handleUpcall() {
708-
if (!mSock)
709-
return;
709+
try {
710+
if (!mSock)
711+
return;
710712

711-
PLOG_VERBOSE << "Handle upcall";
713+
PLOG_VERBOSE << "Handle upcall";
712714

713-
int events = usrsctp_get_events(mSock);
715+
int events = usrsctp_get_events(mSock);
714716

715-
if (events & SCTP_EVENT_READ && mPendingRecvCount == 0) {
716-
++mPendingRecvCount;
717-
mProcessor.enqueue(&SctpTransport::doRecv, shared_from_this());
718-
}
717+
if (events & SCTP_EVENT_READ && mPendingRecvCount == 0) {
718+
++mPendingRecvCount;
719+
mProcessor.enqueue(&SctpTransport::doRecv, shared_from_this());
720+
}
719721

720-
if (events & SCTP_EVENT_WRITE && mPendingFlushCount == 0) {
721-
++mPendingFlushCount;
722-
mProcessor.enqueue(&SctpTransport::doFlush, shared_from_this());
722+
if (events & SCTP_EVENT_WRITE && mPendingFlushCount == 0) {
723+
++mPendingFlushCount;
724+
mProcessor.enqueue(&SctpTransport::doFlush, shared_from_this());
725+
}
726+
727+
} catch (const std::exception &e) {
728+
PLOG_ERROR << "SCTP upcall: " << e.what();
723729
}
724730
}
725731

0 commit comments

Comments
 (0)