mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Add initialization and cleanup functions for Winsock
Originally committed as revision 10040 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
7c04134fa1
commit
1642cb6b2e
@ -44,6 +44,23 @@
|
|||||||
|
|
||||||
int ff_socket_nonblock(int socket, int enable);
|
int ff_socket_nonblock(int socket, int enable);
|
||||||
|
|
||||||
|
static inline int ff_network_init(void)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
WSADATA wsaData;
|
||||||
|
if (WSAStartup(MAKEWORD(1,1), &wsaData))
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void ff_network_close(void)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_WINSOCK2_H
|
||||||
|
WSACleanup();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#if !defined(HAVE_INET_ATON)
|
#if !defined(HAVE_INET_ATON)
|
||||||
/* in os_support.c */
|
/* in os_support.c */
|
||||||
int inet_aton (const char * str, struct in_addr * add);
|
int inet_aton (const char * str, struct in_addr * add);
|
||||||
|
@ -53,6 +53,9 @@ static int tcp_open(URLContext *h, const char *uri, int flags)
|
|||||||
if (port <= 0 || port >= 65536)
|
if (port <= 0 || port >= 65536)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
if(!ff_network_init())
|
||||||
|
return AVERROR(EIO);
|
||||||
|
|
||||||
dest_addr.sin_family = AF_INET;
|
dest_addr.sin_family = AF_INET;
|
||||||
dest_addr.sin_port = htons(port);
|
dest_addr.sin_port = htons(port);
|
||||||
if (resolve_host(&dest_addr.sin_addr, hostname) < 0)
|
if (resolve_host(&dest_addr.sin_addr, hostname) < 0)
|
||||||
@ -174,6 +177,7 @@ static int tcp_close(URLContext *h)
|
|||||||
{
|
{
|
||||||
TCPContext *s = h->priv_data;
|
TCPContext *s = h->priv_data;
|
||||||
closesocket(s->fd);
|
closesocket(s->fd);
|
||||||
|
ff_network_close();
|
||||||
av_free(s);
|
av_free(s);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -321,6 +321,9 @@ static int udp_open(URLContext *h, const char *uri, int flags)
|
|||||||
udp_set_remote_url(h, uri);
|
udp_set_remote_url(h, uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!ff_network_init())
|
||||||
|
return AVERROR(EIO);
|
||||||
|
|
||||||
#ifndef CONFIG_IPV6
|
#ifndef CONFIG_IPV6
|
||||||
udp_fd = socket(AF_INET, SOCK_DGRAM, 0);
|
udp_fd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
if (udp_fd < 0)
|
if (udp_fd < 0)
|
||||||
@ -472,6 +475,7 @@ static int udp_close(URLContext *h)
|
|||||||
udp_ipv6_leave_multicast_group(s->udp_fd, (struct sockaddr *)&s->dest_addr);
|
udp_ipv6_leave_multicast_group(s->udp_fd, (struct sockaddr *)&s->dest_addr);
|
||||||
#endif
|
#endif
|
||||||
closesocket(s->udp_fd);
|
closesocket(s->udp_fd);
|
||||||
|
ff_network_close();
|
||||||
av_free(s);
|
av_free(s);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user