@@ -15,15 +15,34 @@ static void ngx_rtmp_proxy_protocol_recv(ngx_event_t *rev);
1515void
1616ngx_rtmp_proxy_protocol (ngx_rtmp_session_t * s )
1717{
18+ ngx_event_t * rev ;
1819 ngx_connection_t * c ;
1920
2021 c = s -> connection ;
21- c -> read -> handler = ngx_rtmp_proxy_protocol_recv ;
22+ rev = c -> read ;
23+ rev -> handler = ngx_rtmp_proxy_protocol_recv ;
2224
2325 ngx_log_debug0 (NGX_LOG_DEBUG_RTMP , s -> connection -> log , 0 ,
2426 "proxy_protocol: start" );
2527
26- ngx_rtmp_proxy_protocol_recv (c -> read );
28+ if (rev -> ready ) {
29+ /* the deferred accept(), rtsig, aio, iocp */
30+
31+ if (ngx_use_accept_mutex ) {
32+ ngx_post_event (rev , & ngx_posted_events );
33+ return ;
34+ }
35+
36+ rev -> handler (rev );
37+ return ;
38+ }
39+
40+ ngx_add_timer (rev , s -> timeout );
41+
42+ if (ngx_handle_read_event (rev , 0 ) != NGX_OK ) {
43+ ngx_rtmp_finalize_session (s );
44+ return ;
45+ }
2746}
2847
2948
@@ -58,10 +77,12 @@ ngx_rtmp_proxy_protocol_recv(ngx_event_t *rev)
5877 ngx_del_timer (rev );
5978 }
6079
61- n = recv (c -> fd , buf , sizeof (buf ), MSG_PEEK );
80+ n = recv (c -> fd , ( char * ) buf , sizeof (buf ), MSG_PEEK );
6281
6382 err = ngx_socket_errno ;
6483
84+ ngx_log_debug1 (NGX_LOG_DEBUG_RTMP , c -> log , 0 , "recv(): %d" , n );
85+
6586 if (n == -1 ) {
6687
6788 if (err == NGX_EAGAIN ) {
@@ -126,7 +147,7 @@ ngx_rtmp_proxy_protocol_recv(ngx_event_t *rev)
126147 }
127148 }
128149
129- if (i + 1 = = n ) {
150+ if (i + 1 > = n ) {
130151 goto bad_header ;
131152 }
132153
0 commit comments