winlin

for bug #241, refine the socket max buffer.

@@ -42,6 +42,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -42,6 +42,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
42 #define SRS_MR_SMALL_BYTES 64 42 #define SRS_MR_SMALL_BYTES 64
43 // the percent of buffer to set as small bytes 43 // the percent of buffer to set as small bytes
44 #define SRS_MR_SMALL_PERCENT 100 44 #define SRS_MR_SMALL_PERCENT 100
  45 +// set the socket buffer to specified KB.
  46 +// the underlayer api will set to 2*SRS_MR_SOCKET_BUFFER KB.
  47 +#define SRS_MR_SOCKET_BUFFER 32
45 48
46 ISrsMessageHandler::ISrsMessageHandler() 49 ISrsMessageHandler::ISrsMessageHandler()
47 { 50 {
@@ -296,14 +299,16 @@ void SrsPublishRecvThread::on_thread_start() @@ -296,14 +299,16 @@ void SrsPublishRecvThread::on_thread_start()
296 // we donot set the auto response to false, 299 // we donot set the auto response to false,
297 // for the main thread never send message. 300 // for the main thread never send message.
298 301
299 - // 128KB recv buffer.  
300 - int nb_rbuf = 128 * 1024; 302 + // socket recv buffer.
  303 + int nb_rbuf = SRS_MR_SOCKET_BUFFER * 1024;
301 socklen_t sock_buf_size = sizeof(int); 304 socklen_t sock_buf_size = sizeof(int);
302 if (setsockopt(mr_fd, SOL_SOCKET, SO_RCVBUF, &nb_rbuf, sock_buf_size) < 0) { 305 if (setsockopt(mr_fd, SOL_SOCKET, SO_RCVBUF, &nb_rbuf, sock_buf_size) < 0) {
303 srs_warn("set sock SO_RCVBUF=%d failed.", nb_rbuf); 306 srs_warn("set sock SO_RCVBUF=%d failed.", nb_rbuf);
304 } 307 }
305 getsockopt(mr_fd, SOL_SOCKET, SO_RCVBUF, &nb_rbuf, &sock_buf_size); 308 getsockopt(mr_fd, SOL_SOCKET, SO_RCVBUF, &nb_rbuf, &sock_buf_size);
306 309
  310 + srs_trace("set socket buffer to %d, actual %d KB", SRS_MR_SOCKET_BUFFER, nb_rbuf / 1024);
  311 +
307 // enable the merge read 312 // enable the merge read
308 // @see https://github.com/winlinvip/simple-rtmp-server/issues/241 313 // @see https://github.com/winlinvip/simple-rtmp-server/issues/241
309 rtmp->set_merge_read(true, nb_rbuf, this); 314 rtmp->set_merge_read(true, nb_rbuf, this);
@@ -33,7 +33,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -33,7 +33,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 // 32KB=32768 33 // 32KB=32768
34 // 64KB=65536 34 // 64KB=65536
35 // @see https://github.com/winlinvip/simple-rtmp-server/issues/241 35 // @see https://github.com/winlinvip/simple-rtmp-server/issues/241
36 -#define SOCKET_READ_SIZE 4096 36 +#define SOCKET_READ_SIZE 65536
37 // the max buffer for user space socket buffer. 37 // the max buffer for user space socket buffer.
38 #define SOCKET_MAX_BUF 65536 38 #define SOCKET_MAX_BUF 65536
39 39
@@ -136,6 +136,10 @@ void SrsBuffer::set_merge_read(bool v, int max_buffer, IMergeReadHandler* handle @@ -136,6 +136,10 @@ void SrsBuffer::set_merge_read(bool v, int max_buffer, IMergeReadHandler* handle
136 if (v && buffer_size != nb_buffer) { 136 if (v && buffer_size != nb_buffer) {
137 reset_buffer(buffer_size); 137 reset_buffer(buffer_size);
138 } 138 }
  139 +
  140 + if (_handler) {
  141 + _handler->on_buffer_change(nb_buffer);
  142 + }
139 } 143 }
140 144
141 void SrsBuffer::on_chunk_size(int32_t chunk_size) 145 void SrsBuffer::on_chunk_size(int32_t chunk_size)
@@ -145,6 +149,10 @@ void SrsBuffer::on_chunk_size(int32_t chunk_size) @@ -145,6 +149,10 @@ void SrsBuffer::on_chunk_size(int32_t chunk_size)
145 } 149 }
146 150
147 reset_buffer(chunk_size); 151 reset_buffer(chunk_size);
  152 +
  153 + if (_handler) {
  154 + _handler->on_buffer_change(nb_buffer);
  155 + }
148 } 156 }
149 157
150 int SrsBuffer::buffer_size() 158 int SrsBuffer::buffer_size()
@@ -158,8 +166,4 @@ void SrsBuffer::reset_buffer(int size) @@ -158,8 +166,4 @@ void SrsBuffer::reset_buffer(int size)
158 166
159 nb_buffer = size; 167 nb_buffer = size;
160 buffer = new char[nb_buffer]; 168 buffer = new char[nb_buffer];
161 -  
162 - if (_handler) {  
163 - _handler->on_buffer_change(nb_buffer);  
164 - }  
165 } 169 }