mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
add set socket buffer func
This commit is contained in:
parent
4fc54c9c99
commit
06548a7fa8
2 changed files with 48 additions and 2 deletions
|
@ -42,6 +42,7 @@ using namespace std;
|
||||||
#include <srs_app_utility.hpp>
|
#include <srs_app_utility.hpp>
|
||||||
#include <srs_kernel_utility.hpp>
|
#include <srs_kernel_utility.hpp>
|
||||||
|
|
||||||
|
|
||||||
// set the max packet size.
|
// set the max packet size.
|
||||||
#define SRS_UDP_MAX_PACKET_SIZE 65535
|
#define SRS_UDP_MAX_PACKET_SIZE 65535
|
||||||
|
|
||||||
|
@ -116,6 +117,47 @@ srs_netfd_t SrsUdpListener::stfd()
|
||||||
return lfd;
|
return lfd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SrsUdpListener::set_socket_buffer()
|
||||||
|
{
|
||||||
|
int default_sndbuf = 0;
|
||||||
|
// TODO: FIXME: Config it.
|
||||||
|
int expect_sndbuf = 1024*1024*10; // 10M
|
||||||
|
int actual_sndbuf = expect_sndbuf;
|
||||||
|
int r0_sndbuf = 0;
|
||||||
|
if (true) {
|
||||||
|
socklen_t opt_len = sizeof(default_sndbuf);
|
||||||
|
getsockopt(fd(), SOL_SOCKET, SO_SNDBUF, (void*)&default_sndbuf, &opt_len);
|
||||||
|
|
||||||
|
if ((r0_sndbuf = setsockopt(fd(), SOL_SOCKET, SO_SNDBUF, (void*)&actual_sndbuf, sizeof(actual_sndbuf))) < 0) {
|
||||||
|
srs_warn("set SO_SNDBUF failed, expect=%d, r0=%d", expect_sndbuf, r0_sndbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
opt_len = sizeof(actual_sndbuf);
|
||||||
|
getsockopt(fd(), SOL_SOCKET, SO_SNDBUF, (void*)&actual_sndbuf, &opt_len);
|
||||||
|
}
|
||||||
|
|
||||||
|
int default_rcvbuf = 0;
|
||||||
|
// TODO: FIXME: Config it.
|
||||||
|
int expect_rcvbuf = 1024*1024*10; // 10M
|
||||||
|
int actual_rcvbuf = expect_rcvbuf;
|
||||||
|
int r0_rcvbuf = 0;
|
||||||
|
if (true) {
|
||||||
|
socklen_t opt_len = sizeof(default_rcvbuf);
|
||||||
|
getsockopt(fd(), SOL_SOCKET, SO_RCVBUF, (void*)&default_rcvbuf, &opt_len);
|
||||||
|
|
||||||
|
if ((r0_rcvbuf = setsockopt(fd(), SOL_SOCKET, SO_RCVBUF, (void*)&actual_rcvbuf, sizeof(actual_rcvbuf))) < 0) {
|
||||||
|
srs_warn("set SO_RCVBUF failed, expect=%d, r0=%d", expect_rcvbuf, r0_rcvbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
opt_len = sizeof(actual_rcvbuf);
|
||||||
|
getsockopt(fd(), SOL_SOCKET, SO_RCVBUF, (void*)&actual_rcvbuf, &opt_len);
|
||||||
|
}
|
||||||
|
|
||||||
|
srs_trace("UDP #%d LISTEN at %s:%d, SO_SNDBUF(default=%d, expect=%d, actual=%d, r0=%d), SO_RCVBUF(default=%d, expect=%d, actual=%d, r0=%d)",
|
||||||
|
srs_netfd_fileno(lfd), ip.c_str(), port, default_sndbuf, expect_sndbuf, actual_sndbuf, r0_sndbuf, default_rcvbuf, expect_rcvbuf, actual_rcvbuf, r0_rcvbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
srs_error_t SrsUdpListener::listen()
|
srs_error_t SrsUdpListener::listen()
|
||||||
{
|
{
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
|
@ -124,6 +166,8 @@ srs_error_t SrsUdpListener::listen()
|
||||||
return srs_error_wrap(err, "listen %s:%d", ip.c_str(), port);
|
return srs_error_wrap(err, "listen %s:%d", ip.c_str(), port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_socket_buffer();
|
||||||
|
|
||||||
handler->set_stfd(lfd);
|
handler->set_stfd(lfd);
|
||||||
|
|
||||||
srs_freep(trd);
|
srs_freep(trd);
|
||||||
|
@ -138,7 +182,7 @@ srs_error_t SrsUdpListener::listen()
|
||||||
srs_error_t SrsUdpListener::cycle()
|
srs_error_t SrsUdpListener::cycle()
|
||||||
{
|
{
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if ((err = trd->pull()) != srs_success) {
|
if ((err = trd->pull()) != srs_success) {
|
||||||
return srs_error_wrap(err, "udp listener");
|
return srs_error_wrap(err, "udp listener");
|
||||||
|
@ -158,7 +202,7 @@ srs_error_t SrsUdpListener::cycle()
|
||||||
&& buf[19] == 0x63 && buf[20] == 0x6b) {
|
&& buf[19] == 0x63 && buf[20] == 0x6b) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((err = handler->on_udp_packet((const sockaddr*)&from, nb_from, buf, nread)) != srs_success) {
|
if ((err = handler->on_udp_packet((const sockaddr*)&from, nb_from, buf, nread)) != srs_success) {
|
||||||
return srs_error_wrap(err, "handle packet %d bytes", nread);
|
return srs_error_wrap(err, "handle packet %d bytes", nread);
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,6 +102,8 @@ public:
|
||||||
public:
|
public:
|
||||||
virtual int fd();
|
virtual int fd();
|
||||||
virtual srs_netfd_t stfd();
|
virtual srs_netfd_t stfd();
|
||||||
|
private:
|
||||||
|
void set_socket_buffer();
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t listen();
|
virtual srs_error_t listen();
|
||||||
// Interface ISrsReusableThreadHandler.
|
// Interface ISrsReusableThreadHandler.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue