diff options
author | Samuel Pitoiset <samuel.pitoiset@gmail.com> | 2012-05-21 11:24:55 +0200 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2012-05-22 23:16:42 +0300 |
commit | 4a9ca9355607053fdbcb8adcb614b08305eca88f (patch) | |
tree | cc8aba721fce591dc47780f45eb7f0b064ca4ee2 | |
parent | 32d545e0a4686e919319bf472725ea0162b72720 (diff) | |
download | ffmpeg-4a9ca9355607053fdbcb8adcb614b08305eca88f.tar.gz |
tcp: Allow signalling end of reading/writing
tcp_shutdown() isn't needed at the moment, but is added for
consistency to explain how the function is supposed to be used.
Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r-- | libavformat/os_support.h | 6 | ||||
-rw-r--r-- | libavformat/tcp.c | 17 |
2 files changed, 23 insertions, 0 deletions
diff --git a/libavformat/os_support.h b/libavformat/os_support.h index 20c6d73738..1088c6c31c 100644 --- a/libavformat/os_support.h +++ b/libavformat/os_support.h @@ -45,6 +45,12 @@ static inline int is_dos_path(const char *path) return 0; } +#if defined(_WIN32) +#define SHUT_RD SD_RECEIVE +#define SHUT_WR SD_SEND +#define SHUT_RDWR SD_BOTH +#endif + #if defined(_WIN32) && !defined(__MINGW32CE__) int ff_win32_open(const char *filename, int oflag, int pmode); #define open ff_win32_open diff --git a/libavformat/tcp.c b/libavformat/tcp.c index 0ed11f321f..37f74f6e2f 100644 --- a/libavformat/tcp.c +++ b/libavformat/tcp.c @@ -182,6 +182,22 @@ static int tcp_write(URLContext *h, const uint8_t *buf, int size) return ret < 0 ? ff_neterrno() : ret; } +static int tcp_shutdown(URLContext *h, int flags) +{ + TCPContext *s = h->priv_data; + int how; + + if (flags & AVIO_FLAG_WRITE && flags & AVIO_FLAG_READ) { + how = SHUT_RDWR; + } else if (flags & AVIO_FLAG_WRITE) { + how = SHUT_WR; + } else { + how = SHUT_RD; + } + + return shutdown(s->fd, how); +} + static int tcp_close(URLContext *h) { TCPContext *s = h->priv_data; @@ -202,6 +218,7 @@ URLProtocol ff_tcp_protocol = { .url_write = tcp_write, .url_close = tcp_close, .url_get_file_handle = tcp_get_file_handle, + .url_shutdown = tcp_shutdown, .priv_data_size = sizeof(TCPContext), .flags = URL_PROTOCOL_FLAG_NETWORK, }; |