mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +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:
commit
4d4f5911d3
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Bink video decoder
|
* Bink video decoder
|
||||||
* Copyright (C) 2009 Kostya Shishkov
|
* Copyright (C) 2009 Konstantin Shishkov
|
||||||
*
|
*
|
||||||
* This file is part of FFmpeg.
|
* This file is part of FFmpeg.
|
||||||
*
|
*
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Bink DSP routines
|
* Bink DSP routines
|
||||||
* Copyright (c) 2009 Kostya Shishkov
|
* Copyright (c) 2009 Konstantin Shishkov
|
||||||
*
|
*
|
||||||
* This file is part of FFmpeg.
|
* This file is part of FFmpeg.
|
||||||
*
|
*
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Bink DSP routines
|
* Bink DSP routines
|
||||||
* Copyright (c) 2009 Kostya Shishkov
|
* Copyright (c) 2009 Konstantin Shishkov
|
||||||
*
|
*
|
||||||
* This file is part of Libav.
|
* This file is part of Libav.
|
||||||
*
|
*
|
||||||
|
@ -212,3 +212,32 @@ int ff_is_multicast_address(struct sockaddr *addr)
|
|||||||
|
|
||||||
return 0;
|
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_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 */
|
#endif /* AVFORMAT_NETWORK_H */
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* RTMP definitions
|
* RTMP definitions
|
||||||
* Copyright (c) 2009 Kostya Shishkov
|
* Copyright (c) 2009 Konstantin Shishkov
|
||||||
*
|
*
|
||||||
* This file is part of FFmpeg.
|
* This file is part of FFmpeg.
|
||||||
*
|
*
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* RTMP input format
|
* RTMP input format
|
||||||
* Copyright (c) 2009 Kostya Shishkov
|
* Copyright (c) 2009 Konstantin Shishkov
|
||||||
*
|
*
|
||||||
* This file is part of FFmpeg.
|
* This file is part of FFmpeg.
|
||||||
*
|
*
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* RTMP packet utilities
|
* RTMP packet utilities
|
||||||
* Copyright (c) 2009 Kostya Shishkov
|
* Copyright (c) 2009 Konstantin Shishkov
|
||||||
*
|
*
|
||||||
* This file is part of FFmpeg.
|
* This file is part of FFmpeg.
|
||||||
*
|
*
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* RTMP network protocol
|
* RTMP network protocol
|
||||||
* Copyright (c) 2009 Kostya Shishkov
|
* Copyright (c) 2009 Konstantin Shishkov
|
||||||
*
|
*
|
||||||
* This file is part of FFmpeg.
|
* This file is part of FFmpeg.
|
||||||
*
|
*
|
||||||
|
@ -108,39 +108,18 @@ static int tcp_open(URLContext *h, const char *uri, int flags)
|
|||||||
cur_ai = ai;
|
cur_ai = ai;
|
||||||
|
|
||||||
restart:
|
restart:
|
||||||
ret = AVERROR(EIO);
|
|
||||||
fd = socket(cur_ai->ai_family, cur_ai->ai_socktype, cur_ai->ai_protocol);
|
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;
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
if (s->listen) {
|
if (s->listen) {
|
||||||
int fd1;
|
if ((fd = ff_listen_bind(fd, cur_ai->ai_addr, cur_ai->ai_addrlen,
|
||||||
int reuse = 1;
|
s->listen_timeout)) < 0) {
|
||||||
struct pollfd lp = { fd, POLLIN, 0 };
|
ret = fd;
|
||||||
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();
|
|
||||||
goto fail1;
|
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 {
|
} else {
|
||||||
redo:
|
redo:
|
||||||
ff_socket_nonblock(fd, 1);
|
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;
|
cur_ai = cur_ai->ai_next;
|
||||||
if (fd >= 0)
|
if (fd >= 0)
|
||||||
closesocket(fd);
|
closesocket(fd);
|
||||||
|
ret = 0;
|
||||||
goto restart;
|
goto restart;
|
||||||
}
|
}
|
||||||
fail1:
|
fail1:
|
||||||
|
Loading…
Reference in New Issue
Block a user