| 
																	
																	
																		
																	
																	
																 | 
																@@ -39,6 +39,8 @@ typedef struct TCPContext { | 
															
														
														
													
														
															
																 | 
																 | 
																    int open_timeout; | 
																 | 
																 | 
																    int open_timeout; | 
															
														
														
													
														
															
																 | 
																 | 
																    int rw_timeout; | 
																 | 
																 | 
																    int rw_timeout; | 
															
														
														
													
														
															
																 | 
																 | 
																    int listen_timeout; | 
																 | 
																 | 
																    int listen_timeout; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    int recv_buffer_size; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    int send_buffer_size; | 
															
														
														
													
														
															
																 | 
																 | 
																} TCPContext; | 
																 | 
																 | 
																} TCPContext; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																#define OFFSET(x) offsetof(TCPContext, x) | 
																 | 
																 | 
																#define OFFSET(x) offsetof(TCPContext, x) | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -48,6 +50,8 @@ static const AVOption options[] = { | 
															
														
														
													
														
															
																 | 
																 | 
																    { "listen",          "Listen for incoming connections",  OFFSET(listen),         AV_OPT_TYPE_INT, { .i64 = 0 },     0,       2,       .flags = D|E }, | 
																 | 
																 | 
																    { "listen",          "Listen for incoming connections",  OFFSET(listen),         AV_OPT_TYPE_INT, { .i64 = 0 },     0,       2,       .flags = D|E }, | 
															
														
														
													
														
															
																 | 
																 | 
																    { "timeout",     "set timeout (in microseconds) of socket I/O operations", OFFSET(rw_timeout),     AV_OPT_TYPE_INT, { .i64 = -1 },         -1, INT_MAX, .flags = D|E }, | 
																 | 
																 | 
																    { "timeout",     "set timeout (in microseconds) of socket I/O operations", OFFSET(rw_timeout),     AV_OPT_TYPE_INT, { .i64 = -1 },         -1, INT_MAX, .flags = D|E }, | 
															
														
														
													
														
															
																 | 
																 | 
																    { "listen_timeout",  "Connection awaiting timeout (in milliseconds)",      OFFSET(listen_timeout), AV_OPT_TYPE_INT, { .i64 = -1 },         -1, INT_MAX, .flags = D|E }, | 
																 | 
																 | 
																    { "listen_timeout",  "Connection awaiting timeout (in milliseconds)",      OFFSET(listen_timeout), AV_OPT_TYPE_INT, { .i64 = -1 },         -1, INT_MAX, .flags = D|E }, | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    { "send_buffer_size", "Socket send buffer size (in bytes)",                OFFSET(send_buffer_size), AV_OPT_TYPE_INT, { .i64 = -1 },         -1, INT_MAX, .flags = D|E }, | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    { "recv_buffer_size", "Socket receive buffer size (in bytes)",             OFFSET(recv_buffer_size), AV_OPT_TYPE_INT, { .i64 = -1 },         -1, INT_MAX, .flags = D|E }, | 
															
														
														
													
														
															
																 | 
																 | 
																    { NULL } | 
																 | 
																 | 
																    { NULL } | 
															
														
														
													
														
															
																 | 
																 | 
																}; | 
																 | 
																 | 
																}; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -150,6 +154,15 @@ static int tcp_open(URLContext *h, const char *uri, int flags) | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    h->is_streamed = 1; | 
																 | 
																 | 
																    h->is_streamed = 1; | 
															
														
														
													
														
															
																 | 
																 | 
																    s->fd = fd; | 
																 | 
																 | 
																    s->fd = fd; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    /* Set the socket's send or receive buffer sizes, if specified. | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																       If unspecified or setting fails, system default is used. */ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    if (s->recv_buffer_size > 0) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        setsockopt (fd, SOL_SOCKET, SO_RCVBUF, &s->recv_buffer_size, sizeof (s->recv_buffer_size)); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    if (s->send_buffer_size > 0) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        setsockopt (fd, SOL_SOCKET, SO_SNDBUF, &s->send_buffer_size, sizeof (s->send_buffer_size)); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    freeaddrinfo(ai); | 
																 | 
																 | 
																    freeaddrinfo(ai); | 
															
														
														
													
														
															
																 | 
																 | 
																    return 0; | 
																 | 
																 | 
																    return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																	
																 | 
																
  |