mirror of
https://github.com/ossrs/srs.git
synced 2025-02-13 11:51:57 +00:00
SRT: check srt_connect return value
This commit is contained in:
parent
bb91297071
commit
7da792f19d
1 changed files with 21 additions and 11 deletions
|
@ -530,9 +530,13 @@ srs_error_t SrsSrtSocket::connect(const string& ip, int port)
|
|||
// TODO: FIXME: inet_addr is deprecated
|
||||
inaddr.sin_addr.s_addr = inet_addr(ip.c_str());
|
||||
|
||||
// @see https://github.com/Haivision/srt/blob/master/docs/API/API-functions.md#srt_connect
|
||||
int ret = srt_connect(srt_fd_, (const sockaddr*)&inaddr, sizeof(inaddr));
|
||||
|
||||
// TODO: FIXME: check return value.
|
||||
if (ret == 0) {
|
||||
// Connect succuess, in async mode, means SRT API succuess and return directly,
|
||||
// and the connection is in progress, like tcp socket API connect errno EINPROGRESS,
|
||||
// and the SRT IO threads will do the real handshake step to finish srt connect.
|
||||
SRT_SOCKSTATUS srt_status = srt_getsockstate(srt_fd_);
|
||||
if (srt_status != SRTS_CONNECTED) {
|
||||
// Connect is in progress, wait until it finish or error.
|
||||
|
@ -546,6 +550,9 @@ srs_error_t SrsSrtSocket::connect(const string& ip, int port)
|
|||
return srs_error_new(ERROR_SRT_IO, "srt_connect, err=%s", srt_getlasterror_str());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return srs_error_new(ERROR_SRT_IO, "srt_connect, err=%s", srt_getlasterror_str());
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
@ -557,6 +564,7 @@ srs_error_t SrsSrtSocket::accept(SRTSOCKET* client_srt_fd)
|
|||
while (true) {
|
||||
sockaddr_in inaddr;
|
||||
int addrlen = sizeof(inaddr);
|
||||
// @see https://github.com/Haivision/srt/blob/master/docs/API/API-functions.md#srt_accept
|
||||
SRTSOCKET srt_fd = srt_accept(srt_fd_, (sockaddr*)&inaddr, &addrlen);
|
||||
if (srt_fd == SRT_INVALID_SOCK) {
|
||||
if (srt_getlasterror(NULL) == SRT_EASYNCRCV) {
|
||||
|
@ -582,6 +590,7 @@ srs_error_t SrsSrtSocket::recvmsg(void* buf, size_t size, ssize_t* nread)
|
|||
srs_error_t err = srs_success;
|
||||
|
||||
while (true) {
|
||||
// @see https://github.com/Haivision/srt/blob/master/docs/API/API-functions.md#srt_recvmsg
|
||||
int ret = srt_recvmsg(srt_fd_, (char*)buf, size);
|
||||
if (ret < 0) {
|
||||
if (srt_getlasterror(NULL) == SRT_EASYNCRCV) {
|
||||
|
@ -607,6 +616,7 @@ srs_error_t SrsSrtSocket::sendmsg(void* buf, size_t size, ssize_t* nwrite)
|
|||
srs_error_t err = srs_success;
|
||||
|
||||
while (true) {
|
||||
// @see https://github.com/Haivision/srt/blob/master/docs/API/API-functions.md#srt_sendmsg
|
||||
int ret = srt_sendmsg(srt_fd_, (const char*)buf, size, -1, 1);
|
||||
if (ret < 0) {
|
||||
if (srt_getlasterror(NULL) == SRT_EASYNCSND) {
|
||||
|
|
Loading…
Reference in a new issue