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>
pull/30/merge
Samuel Pitoiset 13 years ago committed by Martin Storsjö
parent 32d545e0a4
commit 4a9ca93556
  1. 6
      libavformat/os_support.h
  2. 17
      libavformat/tcp.c

@ -45,6 +45,12 @@ static inline int is_dos_path(const char *path)
return 0; 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__) #if defined(_WIN32) && !defined(__MINGW32CE__)
int ff_win32_open(const char *filename, int oflag, int pmode); int ff_win32_open(const char *filename, int oflag, int pmode);
#define open ff_win32_open #define open ff_win32_open

@ -182,6 +182,22 @@ static int tcp_write(URLContext *h, const uint8_t *buf, int size)
return ret < 0 ? ff_neterrno() : ret; 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) static int tcp_close(URLContext *h)
{ {
TCPContext *s = h->priv_data; TCPContext *s = h->priv_data;
@ -202,6 +218,7 @@ URLProtocol ff_tcp_protocol = {
.url_write = tcp_write, .url_write = tcp_write,
.url_close = tcp_close, .url_close = tcp_close,
.url_get_file_handle = tcp_get_file_handle, .url_get_file_handle = tcp_get_file_handle,
.url_shutdown = tcp_shutdown,
.priv_data_size = sizeof(TCPContext), .priv_data_size = sizeof(TCPContext),
.flags = URL_PROTOCOL_FLAG_NETWORK, .flags = URL_PROTOCOL_FLAG_NETWORK,
}; };

Loading…
Cancel
Save