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);
|
||||
|
||||
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)
|
||||
/* in os_support.c */
|
||||
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)
|
||||
goto fail;
|
||||
|
||||
if(!ff_network_init())
|
||||
return AVERROR(EIO);
|
||||
|
||||
dest_addr.sin_family = AF_INET;
|
||||
dest_addr.sin_port = htons(port);
|
||||
if (resolve_host(&dest_addr.sin_addr, hostname) < 0)
|
||||
@ -174,6 +177,7 @@ static int tcp_close(URLContext *h)
|
||||
{
|
||||
TCPContext *s = h->priv_data;
|
||||
closesocket(s->fd);
|
||||
ff_network_close();
|
||||
av_free(s);
|
||||
return 0;
|
||||
}
|
||||
|
@ -321,6 +321,9 @@ static int udp_open(URLContext *h, const char *uri, int flags)
|
||||
udp_set_remote_url(h, uri);
|
||||
}
|
||||
|
||||
if(!ff_network_init())
|
||||
return AVERROR(EIO);
|
||||
|
||||
#ifndef CONFIG_IPV6
|
||||
udp_fd = socket(AF_INET, SOCK_DGRAM, 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);
|
||||
#endif
|
||||
closesocket(s->udp_fd);
|
||||
ff_network_close();
|
||||
av_free(s);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user