上次谈到端口侦听后,如果有连接上来,会一直回调到server的accept_client函数里。下面来一步一步分析这个函数。并分析下srs的连接框架
int max_connections = _srs_config->get_max_connections();
if ((int)conns.size() >= max_connections) {
srs_error("exceed the max connections, drop client: "
"clients=%d, max=%d, fd=%d", (int)conns.size(), max_connections, fd);
srs_close_stfd(client_stfd);
return ret;
}
首先检测是否达到了最大连接数。这个连接数是所有连接,包括rtmp http rtsp等的连接数。这个最大连接数可以在配置文件中配置。默认为SRS_CONF_DEFAULT_MAX_CONNECTIONS =1000
if (true) {
int val;
if ((val = fcntl(fd, F_GETFD, 0)) < 0) {
ret = ERROR_SYSTEM_PID_GET_FILE_INFO;
srs_error("fnctl F_GETFD error! fd=%d. ret=%#x", fd, ret);
srs_close_stfd(client_stfd);
return ret;