# HG changeset patch # User ramiro # Date 1186702745 0 # Node ID b9a881c0967e9c04e91ea42241659e7cf750768e # Parent a0fb5ef1ec7cdb3abdce7747e993db35c5bf72a0 Add initialization and cleanup functions for Winsock diff -r a0fb5ef1ec7c -r b9a881c0967e network.h --- a/network.h Thu Aug 09 23:29:58 2007 +0000 +++ b/network.h Thu Aug 09 23:39:05 2007 +0000 @@ -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); diff -r a0fb5ef1ec7c -r b9a881c0967e tcp.c --- a/tcp.c Thu Aug 09 23:29:58 2007 +0000 +++ b/tcp.c Thu Aug 09 23:39:05 2007 +0000 @@ -53,6 +53,9 @@ 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 @@ { TCPContext *s = h->priv_data; closesocket(s->fd); + ff_network_close(); av_free(s); return 0; } diff -r a0fb5ef1ec7c -r b9a881c0967e udp.c --- a/udp.c Thu Aug 09 23:29:58 2007 +0000 +++ b/udp.c Thu Aug 09 23:39:05 2007 +0000 @@ -321,6 +321,9 @@ 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 @@ 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; }