mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
For #988, refine code.
This commit is contained in:
parent
823dc2df21
commit
922a8f3a5c
11 changed files with 104 additions and 122 deletions
|
@ -34,6 +34,7 @@
|
|||
#include <netdb.h>
|
||||
using namespace std;
|
||||
|
||||
#include <srs_core_autofree.hpp>
|
||||
#include <srs_kernel_log.hpp>
|
||||
#include <srs_kernel_error.hpp>
|
||||
#include <srs_app_server.hpp>
|
||||
|
@ -112,31 +113,31 @@ srs_error_t SrsUdpListener::listen()
|
|||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
char port_string[8];
|
||||
snprintf(port_string, sizeof(port_string), "%d", port);
|
||||
char sport[8];
|
||||
snprintf(sport, sizeof(sport), "%d", port);
|
||||
|
||||
addrinfo hints;
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_family = AF_UNSPEC;
|
||||
hints.ai_socktype = SOCK_DGRAM;
|
||||
hints.ai_flags = AI_NUMERICHOST;
|
||||
addrinfo* result = NULL;
|
||||
if(getaddrinfo(ip.c_str(), port_string, (const addrinfo*)&hints, &result) != 0) {
|
||||
return srs_error_new(ERROR_SYSTEM_IP_INVALID, "bad address");
|
||||
|
||||
addrinfo* r = NULL;
|
||||
SrsAutoFree(addrinfo, r);
|
||||
if(getaddrinfo(ip.c_str(), sport, (const addrinfo*)&hints, &r) != 0) {
|
||||
return srs_error_new(ERROR_SYSTEM_IP_INVALID, "get address info");
|
||||
}
|
||||
|
||||
if ((_fd = socket(result->ai_family, result->ai_socktype, result->ai_protocol)) == -1) {
|
||||
freeaddrinfo(result);
|
||||
return srs_error_new(ERROR_SOCKET_CREATE, "create linux socket error. ip=%s, port=%d", ip.c_str(), port);
|
||||
if ((_fd = socket(r->ai_family, r->ai_socktype, r->ai_protocol)) == -1) {
|
||||
return srs_error_new(ERROR_SOCKET_CREATE, "create socket. ip=%s, port=%d", ip.c_str(), port);
|
||||
}
|
||||
|
||||
srs_fd_close_exec(_fd);
|
||||
srs_socket_reuse_addr(_fd);
|
||||
|
||||
if (bind(_fd, result->ai_addr, result->ai_addrlen) == -1) {
|
||||
freeaddrinfo(result);
|
||||
return srs_error_new(ERROR_SOCKET_BIND, "bind socket error. ep=%s:%d", ip.c_str(), port);;
|
||||
if (bind(_fd, r->ai_addr, r->ai_addrlen) == -1) {
|
||||
return srs_error_new(ERROR_SOCKET_BIND, "bind socket. ep=%s:%d", ip.c_str(), port);;
|
||||
}
|
||||
freeaddrinfo(result);
|
||||
|
||||
if ((_stfd = srs_netfd_open_socket(_fd)) == NULL){
|
||||
return srs_error_new(ERROR_ST_OPEN_SOCKET, "st open socket");
|
||||
|
@ -208,31 +209,31 @@ srs_error_t SrsTcpListener::listen()
|
|||
{
|
||||
srs_error_t err = srs_success;
|
||||
|
||||
char port_string[8];
|
||||
snprintf(port_string, sizeof(port_string), "%d", port);
|
||||
char sport[8];
|
||||
snprintf(sport, sizeof(sport), "%d", port);
|
||||
|
||||
addrinfo hints;
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_family = AF_UNSPEC;
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
hints.ai_flags = AI_NUMERICHOST;
|
||||
addrinfo* result = NULL;
|
||||
if(getaddrinfo(ip.c_str(), port_string, (const addrinfo*)&hints, &result) != 0) {
|
||||
return srs_error_new(ERROR_SYSTEM_IP_INVALID, "bad address");
|
||||
|
||||
addrinfo* r = NULL;
|
||||
SrsAutoFree(addrinfo, r);
|
||||
if(getaddrinfo(ip.c_str(), sport, (const addrinfo*)&hints, &r) != 0) {
|
||||
return srs_error_new(ERROR_SYSTEM_IP_INVALID, "get address info");
|
||||
}
|
||||
|
||||
if ((_fd = socket(result->ai_family, result->ai_socktype, result->ai_protocol)) == -1) {
|
||||
freeaddrinfo(result);
|
||||
return srs_error_new(ERROR_SOCKET_CREATE, "create linux socket error. ip=%s, port=%d", ip.c_str(), port);
|
||||
if ((_fd = socket(r->ai_family, r->ai_socktype, r->ai_protocol)) == -1) {
|
||||
return srs_error_new(ERROR_SOCKET_CREATE, "create socket. ip=%s, port=%d", ip.c_str(), port);
|
||||
}
|
||||
|
||||
srs_fd_close_exec(_fd);
|
||||
srs_socket_reuse_addr(_fd);
|
||||
|
||||
if (bind(_fd, result->ai_addr, result->ai_addrlen) == -1) {
|
||||
freeaddrinfo(result);
|
||||
return srs_error_new(ERROR_SOCKET_BIND, "bind socket error. ep=%s:%d", ip.c_str(), port);;
|
||||
if (bind(_fd, r->ai_addr, r->ai_addrlen) == -1) {
|
||||
return srs_error_new(ERROR_SOCKET_BIND, "bind socket. ep=%s:%d", ip.c_str(), port);;
|
||||
}
|
||||
freeaddrinfo(result);
|
||||
|
||||
if (::listen(_fd, SERVER_LISTEN_BACKLOG) == -1) {
|
||||
return srs_error_new(ERROR_SOCKET_LISTEN, "listen socket");
|
||||
|
|
|
@ -54,7 +54,7 @@ SrsRtpConn::SrsRtpConn(SrsRtspConn* r, int p, int sid)
|
|||
_port = p;
|
||||
stream_id = sid;
|
||||
// TODO: support listen at <[ip:]port>
|
||||
listener = new SrsUdpListener(this, (srs_check_ipv6() ? "::" : "0.0.0.0"), p);
|
||||
listener = new SrsUdpListener(this, srs_any_address4listener(), p);
|
||||
cache = new SrsRtpPacket();
|
||||
pprint = SrsPithyPrint::create_caster();
|
||||
}
|
||||
|
|
|
@ -1137,7 +1137,7 @@ srs_error_t SrsServer::listen_stream_caster()
|
|||
}
|
||||
|
||||
// TODO: support listen at <[ip:]port>
|
||||
if ((err = listener->listen( (srs_check_ipv6() ? "::" : "0.0.0.0"), port)) != srs_success) {
|
||||
if ((err = listener->listen(srs_any_address4listener(), port)) != srs_success) {
|
||||
return srs_error_wrap(err, "listen at %d", port);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1104,16 +1104,6 @@ void srs_update_rtmp_server(int nb_conn, SrsKbps* kbps)
|
|||
}
|
||||
}
|
||||
|
||||
int srs_check_ipv6()
|
||||
{
|
||||
int sd = socket(AF_INET6, SOCK_DGRAM, 0);
|
||||
if(sd >= 0) {
|
||||
close(sd);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
string srs_get_local_ip(int fd)
|
||||
{
|
||||
// discovery client information
|
||||
|
@ -1122,19 +1112,16 @@ string srs_get_local_ip(int fd)
|
|||
if (getsockname(fd, (sockaddr*)&addr, &addrlen) == -1) {
|
||||
return "";
|
||||
}
|
||||
srs_verbose("get local ip success.");
|
||||
|
||||
char address_string[64];
|
||||
const int success = getnameinfo((const sockaddr*)&addr, addrlen,
|
||||
(char*)&address_string, sizeof(address_string),
|
||||
NULL, 0,
|
||||
NI_NUMERICHOST);
|
||||
if(success != 0) {
|
||||
char saddr[64];
|
||||
char* h = (char*)saddr;
|
||||
socklen_t nbh = (socklen_t)sizeof(saddr);
|
||||
const int r0 = getnameinfo((const sockaddr*)&addr, addrlen, h, nbh,NULL, 0, NI_NUMERICHOST);
|
||||
if(r0 != 0) {
|
||||
return "";
|
||||
}
|
||||
|
||||
srs_verbose("get local ip of client ip=%s, fd=%d", address_string, fd);
|
||||
return std::string(address_string);
|
||||
return std::string(saddr);
|
||||
}
|
||||
|
||||
int srs_get_local_port(int fd)
|
||||
|
@ -1145,7 +1132,6 @@ int srs_get_local_port(int fd)
|
|||
if (getsockname(fd, (sockaddr*)&addr, &addrlen) == -1) {
|
||||
return 0;
|
||||
}
|
||||
srs_verbose("get local ip success.");
|
||||
|
||||
int port = 0;
|
||||
switch(addr.ss_family) {
|
||||
|
@ -1157,7 +1143,6 @@ int srs_get_local_port(int fd)
|
|||
break;
|
||||
}
|
||||
|
||||
srs_verbose("get local port of client port=%s, fd=%d", port, fd);
|
||||
return port;
|
||||
}
|
||||
|
||||
|
@ -1169,19 +1154,16 @@ string srs_get_peer_ip(int fd)
|
|||
if (getsockname(fd, (sockaddr*)&addr, &addrlen) == -1) {
|
||||
return "";
|
||||
}
|
||||
srs_verbose("get peer ip success.");
|
||||
|
||||
char address_string[64];
|
||||
const int success = getnameinfo((const sockaddr*)&addr, addrlen,
|
||||
(char*)&address_string, sizeof(address_string),
|
||||
NULL, 0,
|
||||
NI_NUMERICHOST);
|
||||
if(success != 0) {
|
||||
char saddr[64];
|
||||
char* h = (char*)saddr;
|
||||
socklen_t nbh = (socklen_t)sizeof(saddr);
|
||||
const int r0 = getnameinfo((const sockaddr*)&addr, addrlen, h, nbh, NULL, 0, NI_NUMERICHOST);
|
||||
if(r0 != 0) {
|
||||
return "";
|
||||
}
|
||||
|
||||
srs_verbose("get peer ip of client ip=%s, fd=%d", address_string, fd);
|
||||
return std::string(address_string);
|
||||
return std::string(saddr);
|
||||
}
|
||||
|
||||
bool srs_is_digit_number(const string& str)
|
||||
|
|
|
@ -643,9 +643,6 @@ extern SrsNetworkRtmpServer* srs_get_network_rtmp_server();
|
|||
// the deamon st-thread will update it.
|
||||
extern void srs_update_rtmp_server(int nb_conn, SrsKbps* kbps);
|
||||
|
||||
// check for IPv6 support
|
||||
extern int srs_check_ipv6();
|
||||
|
||||
// get local or peer ip.
|
||||
// where local ip is the server ip which client connected.
|
||||
extern std::string srs_get_local_ip(int fd);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue