You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	Merge commit '28306e6d620c109ddd672f7243adfbc2bbb3b18f'
* commit '28306e6d620c109ddd672f7243adfbc2bbb3b18f': network: factor out bind-listening code use my full first name instead of short one in copyrights Conflicts: libavformat/tcp.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		| @@ -1,6 +1,6 @@ | ||||
| /* | ||||
|  * Bink video decoder | ||||
|  * Copyright (C) 2009 Kostya Shishkov | ||||
|  * Copyright (C) 2009 Konstantin Shishkov | ||||
|  * | ||||
|  * This file is part of FFmpeg. | ||||
|  * | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| /* | ||||
|  * Bink DSP routines | ||||
|  * Copyright (c) 2009 Kostya Shishkov | ||||
|  * Copyright (c) 2009 Konstantin Shishkov | ||||
|  * | ||||
|  * This file is part of FFmpeg. | ||||
|  * | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| /* | ||||
|  * Bink DSP routines | ||||
|  * Copyright (c) 2009 Kostya Shishkov | ||||
|  * Copyright (c) 2009 Konstantin Shishkov | ||||
|  * | ||||
|  * This file is part of Libav. | ||||
|  * | ||||
|   | ||||
| @@ -212,3 +212,32 @@ int ff_is_multicast_address(struct sockaddr *addr) | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| int ff_listen_bind(int fd, const struct sockaddr *addr, | ||||
|                    socklen_t addrlen, int timeout) | ||||
| { | ||||
|     int ret; | ||||
|     int reuse = 1; | ||||
|     struct pollfd lp = { fd, POLLIN, 0 }; | ||||
|     setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)); | ||||
|     ret = bind(fd, addr, addrlen); | ||||
|     if (ret) | ||||
|         return ff_neterrno(); | ||||
|  | ||||
|     ret = listen(fd, 1); | ||||
|     if (ret) | ||||
|         return ff_neterrno(); | ||||
|  | ||||
|     ret = poll(&lp, 1, timeout >= 0 ? timeout : -1); | ||||
|     if (ret <= 0) | ||||
|         return AVERROR(ETIMEDOUT); | ||||
|  | ||||
|     ret = accept(fd, NULL, NULL); | ||||
|     if (ret < 0) | ||||
|         return ff_neterrno(); | ||||
|  | ||||
|     closesocket(fd); | ||||
|  | ||||
|     ff_socket_nonblock(ret, 1); | ||||
|     return ret; | ||||
| } | ||||
|   | ||||
| @@ -222,4 +222,7 @@ const char *ff_gai_strerror(int ecode); | ||||
|  | ||||
| int ff_is_multicast_address(struct sockaddr *addr); | ||||
|  | ||||
| int ff_listen_bind(int fd, const struct sockaddr *addr, | ||||
|                    socklen_t addrlen, int timeout); | ||||
|  | ||||
| #endif /* AVFORMAT_NETWORK_H */ | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| /* | ||||
|  * RTMP definitions | ||||
|  * Copyright (c) 2009 Kostya Shishkov | ||||
|  * Copyright (c) 2009 Konstantin Shishkov | ||||
|  * | ||||
|  * This file is part of FFmpeg. | ||||
|  * | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| /* | ||||
|  * RTMP input format | ||||
|  * Copyright (c) 2009 Kostya Shishkov | ||||
|  * Copyright (c) 2009 Konstantin Shishkov | ||||
|  * | ||||
|  * This file is part of FFmpeg. | ||||
|  * | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| /* | ||||
|  * RTMP packet utilities | ||||
|  * Copyright (c) 2009 Kostya Shishkov | ||||
|  * Copyright (c) 2009 Konstantin Shishkov | ||||
|  * | ||||
|  * This file is part of FFmpeg. | ||||
|  * | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| /* | ||||
|  * RTMP network protocol | ||||
|  * Copyright (c) 2009 Kostya Shishkov | ||||
|  * Copyright (c) 2009 Konstantin Shishkov | ||||
|  * | ||||
|  * This file is part of FFmpeg. | ||||
|  * | ||||
|   | ||||
| @@ -108,39 +108,18 @@ static int tcp_open(URLContext *h, const char *uri, int flags) | ||||
|     cur_ai = ai; | ||||
|  | ||||
|  restart: | ||||
|     ret = AVERROR(EIO); | ||||
|     fd = socket(cur_ai->ai_family, cur_ai->ai_socktype, cur_ai->ai_protocol); | ||||
|     if (fd < 0) | ||||
|     if (fd < 0) { | ||||
|         ret = ff_neterrno(); | ||||
|         goto fail; | ||||
|     } | ||||
|  | ||||
|     if (s->listen) { | ||||
|         int fd1; | ||||
|         int reuse = 1; | ||||
|         struct pollfd lp = { fd, POLLIN, 0 }; | ||||
|         setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)); | ||||
|         ret = bind(fd, cur_ai->ai_addr, cur_ai->ai_addrlen); | ||||
|         if (ret) { | ||||
|             ret = ff_neterrno(); | ||||
|         if ((fd = ff_listen_bind(fd, cur_ai->ai_addr, cur_ai->ai_addrlen, | ||||
|                                  s->listen_timeout)) < 0) { | ||||
|             ret = fd; | ||||
|             goto fail1; | ||||
|         } | ||||
|         ret = listen(fd, 1); | ||||
|         if (ret) { | ||||
|             ret = ff_neterrno(); | ||||
|             goto fail1; | ||||
|         } | ||||
|         ret = poll(&lp, 1, s->listen_timeout >= 0 ? s->listen_timeout : -1); | ||||
|         if (ret <= 0) { | ||||
|             ret = AVERROR(ETIMEDOUT); | ||||
|             goto fail1; | ||||
|         } | ||||
|         fd1 = accept(fd, NULL, NULL); | ||||
|         if (fd1 < 0) { | ||||
|             ret = ff_neterrno(); | ||||
|             goto fail1; | ||||
|         } | ||||
|         closesocket(fd); | ||||
|         fd = fd1; | ||||
|         ff_socket_nonblock(fd, 1); | ||||
|     } else { | ||||
|  redo: | ||||
|         ff_socket_nonblock(fd, 1); | ||||
| @@ -202,6 +181,7 @@ static int tcp_open(URLContext *h, const char *uri, int flags) | ||||
|         cur_ai = cur_ai->ai_next; | ||||
|         if (fd >= 0) | ||||
|             closesocket(fd); | ||||
|         ret = 0; | ||||
|         goto restart; | ||||
|     } | ||||
|  fail1: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user