mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	refine the get port, return a vector<string> contains ports.
This commit is contained in:
		
							parent
							
								
									1243d962b8
								
							
						
					
					
						commit
						96e0e699dd
					
				
					 4 changed files with 40 additions and 22 deletions
				
			
		| 
						 | 
					@ -1175,15 +1175,6 @@ int SrsConfig::parse_buffer(_srs_internal::SrsConfigBuffer* buffer)
 | 
				
			||||||
        return ret;
 | 
					        return ret;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    SrsConfDirective* conf = NULL;
 | 
					 | 
				
			||||||
    // check rtmp port specified by directive listen.
 | 
					 | 
				
			||||||
    if ((conf = get_listen()) == NULL || conf->args.size() == 0) {
 | 
					 | 
				
			||||||
        ret = ERROR_SYSTEM_CONFIG_INVALID;
 | 
					 | 
				
			||||||
        srs_error("line %d: conf error, "
 | 
					 | 
				
			||||||
            "directive \"listen\" is empty, ret=%d", (conf? conf->conf_line:0), ret);
 | 
					 | 
				
			||||||
        return ret;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    // check root directives.
 | 
					    // check root directives.
 | 
				
			||||||
    for (int i = 0; i < (int)root->directives.size(); i++) {
 | 
					    for (int i = 0; i < (int)root->directives.size(); i++) {
 | 
				
			||||||
        SrsConfDirective* conf = root->at(i);
 | 
					        SrsConfDirective* conf = root->at(i);
 | 
				
			||||||
| 
						 | 
					@ -1200,6 +1191,13 @@ int SrsConfig::parse_buffer(_srs_internal::SrsConfigBuffer* buffer)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    // check rtmp port specified by directive listen.
 | 
				
			||||||
 | 
					    if (_srs_config->get_listen().size() <= 0) {
 | 
				
			||||||
 | 
					        ret = ERROR_SYSTEM_CONFIG_INVALID;
 | 
				
			||||||
 | 
					        srs_error("directive \"listen\" is empty, ret=%d", ret);
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    // TODO: FIXME: check others.
 | 
					    // TODO: FIXME: check others.
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // check log
 | 
					    // check log
 | 
				
			||||||
| 
						 | 
					@ -1259,9 +1257,20 @@ int SrsConfig::get_max_connections()
 | 
				
			||||||
    return ::atoi(conf->arg0().c_str());
 | 
					    return ::atoi(conf->arg0().c_str());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SrsConfDirective* SrsConfig::get_listen()
 | 
					vector<string> SrsConfig::get_listen()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return root->get("listen");
 | 
					    std::vector<string> ports;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    SrsConfDirective* conf = root->get("listen");
 | 
				
			||||||
 | 
					    if (!conf) {
 | 
				
			||||||
 | 
					        return ports;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    for (int i = 0; i < (int)conf->args.size(); i++) {
 | 
				
			||||||
 | 
					        ports.push_back(conf->args.at(i));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return ports;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
string SrsConfig::get_pid_file()
 | 
					string SrsConfig::get_pid_file()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -345,17 +345,26 @@ public:
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
    virtual SrsConfDirective*   get_root();
 | 
					    virtual SrsConfDirective*   get_root();
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
    * 
 | 
					    * get the deamon config.
 | 
				
			||||||
 | 
					    * if true, SRS will run in deamon mode, fork and fork to reap the 
 | 
				
			||||||
 | 
					    * grand-child process to init process.
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
    virtual bool                get_deamon();
 | 
					    virtual bool                get_deamon();
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
    * 
 | 
					    * get the max connections limit of system.
 | 
				
			||||||
 | 
					    * if exceed the max connection, SRS will disconnect the connection.
 | 
				
			||||||
 | 
					    * @remark, linux will limit the connections of each process, 
 | 
				
			||||||
 | 
					    *       for example, when you need SRS to service 10000+ connections,
 | 
				
			||||||
 | 
					    *       user must use "ulimit -HSn 10000" and config the max connections
 | 
				
			||||||
 | 
					    *       of SRS.
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
    virtual int                 get_max_connections();
 | 
					    virtual int                 get_max_connections();
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
    * 
 | 
					    * get the listen port of SRS.
 | 
				
			||||||
 | 
					    * user can specifies multiple listen ports,
 | 
				
			||||||
 | 
					    * each args of directive is a listen port.
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
    virtual SrsConfDirective*   get_listen();
 | 
					    virtual std::vector<std::string>        get_listen();
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
    * 
 | 
					    * 
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -232,9 +232,9 @@ int SrsIngester::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsConfDirective* vhost, S
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int ret = ERROR_SUCCESS;
 | 
					    int ret = ERROR_SUCCESS;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    SrsConfDirective* listen = _srs_config->get_listen();
 | 
					    std::vector<std::string> ports = _srs_config->get_listen();
 | 
				
			||||||
    srs_assert(listen->args.size() > 0);
 | 
					    srs_assert(ports.size() > 0);
 | 
				
			||||||
    std::string port = listen->arg0();
 | 
					    std::string port = ports[0];
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    std::string output = _srs_config->get_engine_output(engine);
 | 
					    std::string output = _srs_config->get_engine_output(engine);
 | 
				
			||||||
    // output stream, to other/self server
 | 
					    // output stream, to other/self server
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -759,16 +759,16 @@ int SrsServer::listen_rtmp()
 | 
				
			||||||
    int ret = ERROR_SUCCESS;
 | 
					    int ret = ERROR_SUCCESS;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // stream service port.
 | 
					    // stream service port.
 | 
				
			||||||
    SrsConfDirective* conf = _srs_config->get_listen();
 | 
					    std::vector<std::string> ports = _srs_config->get_listen();
 | 
				
			||||||
    srs_assert(conf);
 | 
					    srs_assert((int)ports.size() > 0);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    close_listeners(SrsListenerRtmpStream);
 | 
					    close_listeners(SrsListenerRtmpStream);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    for (int i = 0; i < (int)conf->args.size(); i++) {
 | 
					    for (int i = 0; i < (int)ports.size(); i++) {
 | 
				
			||||||
        SrsListener* listener = new SrsListener(this, SrsListenerRtmpStream);
 | 
					        SrsListener* listener = new SrsListener(this, SrsListenerRtmpStream);
 | 
				
			||||||
        listeners.push_back(listener);
 | 
					        listeners.push_back(listener);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        int port = ::atoi(conf->args.at(i).c_str());
 | 
					        int port = ::atoi(ports[i].c_str());
 | 
				
			||||||
        if ((ret = listener->listen(port)) != ERROR_SUCCESS) {
 | 
					        if ((ret = listener->listen(port)) != ERROR_SUCCESS) {
 | 
				
			||||||
            srs_error("RTMP stream listen at port %d failed. ret=%d", port, ret);
 | 
					            srs_error("RTMP stream listen at port %d failed. ret=%d", port, ret);
 | 
				
			||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue