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>
This commit is contained in:
parent
32d545e0a4
commit
4a9ca93556
libavformat
@ -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…
x
Reference in New Issue
Block a user