Skip to content

Commit 7f81192

Browse files
committed
[dev] added support for tcp_nopush and tcp_nodelay.
1 parent cdb396a commit 7f81192

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

ngx_rtmp.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,9 @@ typedef struct {
524524
ngx_msec_t resolver_timeout;
525525

526526
ngx_resolver_t *resolver;
527+
528+
ngx_flag_t tcp_nopush;
529+
ngx_flag_t tcp_nodelay;
527530
} ngx_rtmp_core_app_conf_t;
528531

529532

ngx_rtmp_cmd_module.c

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,10 +236,12 @@ ngx_rtmp_cmd_connect_init(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
236236
static ngx_int_t
237237
ngx_rtmp_cmd_connect(ngx_rtmp_session_t *s, ngx_rtmp_connect_t *v)
238238
{
239+
int tcp_nodelay;
239240
ngx_rtmp_core_srv_conf_t *cscf;
240-
ngx_rtmp_core_app_conf_t **cacfp;
241+
ngx_rtmp_core_app_conf_t **cacfp, *cacf;
241242
ngx_uint_t n;
242243
ngx_rtmp_header_t h;
244+
ngx_connection_t *c;
243245
u_char *p;
244246

245247
static double trans;
@@ -360,6 +362,32 @@ ngx_rtmp_cmd_connect(ngx_rtmp_session_t *s, ngx_rtmp_connect_t *v)
360362
}
361363

362364
object_encoding = v->object_encoding;
365+
366+
if (s->data == NULL) {
367+
cacf = ngx_rtmp_get_module_app_conf(s, ngx_rtmp_core_module);
368+
c = s->connection;
369+
370+
if (!cacf->tcp_nopush) {
371+
c->tcp_nopush = NGX_TCP_NOPUSH_DISABLED;
372+
}
373+
374+
if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
375+
if (ngx_tcp_push(c->fd) == -1) {
376+
ngx_connection_error(c, ngx_socket_errno,
377+
ngx_tcp_push_n " failed");
378+
return NGX_ERROR;
379+
}
380+
381+
c->tcp_nopush = NGX_TCP_NOPUSH_UNSET;
382+
tcp_nodelay = ngx_tcp_nodelay_and_tcp_nopush ? 1 : 0;
383+
} else {
384+
tcp_nodelay = 1;
385+
}
386+
387+
if (tcp_nodelay && cacf->tcp_nodelay && ngx_tcp_nodelay(c) != NGX_OK) {
388+
return NGX_ERROR;
389+
}
390+
}
363391

364392
return ngx_rtmp_send_ack_size(s, cscf->ack_window) != NGX_OK ||
365393
ngx_rtmp_send_bandwidth(s, cscf->ack_window,

ngx_rtmp_core_module.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,20 @@ static ngx_command_t ngx_rtmp_core_commands[] = {
191191
offsetof(ngx_rtmp_core_srv_conf_t, buflen),
192192
NULL },
193193

194+
{ ngx_string("tcp_nopush"),
195+
NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_FLAG,
196+
ngx_conf_set_flag_slot,
197+
NGX_RTMP_APP_CONF_OFFSET,
198+
offsetof(ngx_rtmp_core_app_conf_t, tcp_nopush),
199+
NULL },
200+
201+
{ ngx_string("tcp_nodelay"),
202+
NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_FLAG,
203+
ngx_conf_set_flag_slot,
204+
NGX_RTMP_APP_CONF_OFFSET,
205+
offsetof(ngx_rtmp_core_app_conf_t, tcp_nodelay),
206+
NULL },
207+
194208
{ ngx_string("send_timeout"),
195209
NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_TAKE1,
196210
ngx_conf_set_msec_slot,
@@ -485,6 +499,8 @@ ngx_rtmp_core_create_app_conf(ngx_conf_t *cf)
485499
return NULL;
486500
}
487501

502+
conf->tcp_nopush = NGX_CONF_UNSET;
503+
conf->tcp_nodelay = NGX_CONF_UNSET;
488504
conf->send_timeout = NGX_CONF_UNSET_MSEC;
489505
conf->send_lowat = NGX_CONF_UNSET_SIZE;
490506
conf->resolver_timeout = NGX_CONF_UNSET_MSEC;
@@ -499,6 +515,9 @@ ngx_rtmp_core_merge_app_conf(ngx_conf_t *cf, void *parent, void *child)
499515
ngx_rtmp_core_app_conf_t *prev = parent;
500516
ngx_rtmp_core_app_conf_t *conf = child;
501517

518+
ngx_conf_merge_value(conf->tcp_nopush, prev->tcp_nopush, 0);
519+
ngx_conf_merge_value(conf->tcp_nodelay, prev->tcp_nodelay, 1);
520+
502521
ngx_conf_merge_msec_value(conf->send_timeout, prev->send_timeout, 60000);
503522
ngx_conf_merge_size_value(conf->send_lowat, prev->send_lowat, 0);
504523

0 commit comments

Comments
 (0)