+static void
+init_reset_sockets (GIOWin32Channel *channel)
+{
+ struct sockaddr_in local, local2, server;
+ int len;
+
+ channel->reset_send = (gint) socket (AF_INET, SOCK_DGRAM, 0);
+ if (channel->reset_send == INVALID_SOCKET)
+ {
+ g_warning (G_STRLOC ": Error creating reset_send socket: %s\n",
+ g_win32_error_message (WSAGetLastError ()));
+ }
+
+ local.sin_family = AF_INET;
+ local.sin_port = 0;
+ local.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
+
+ if (bind (channel->reset_send, (struct sockaddr *)&local, sizeof (local)) == SOCKET_ERROR)
+ {
+ g_warning (G_STRLOC ": Error binding to reset_send socket: %s\n",
+ g_win32_error_message (WSAGetLastError ()));
+ }
+
+ local2.sin_family = AF_INET;
+ local2.sin_port = 0;
+ local2.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
+
+ channel->reset_recv = (gint) socket (AF_INET, SOCK_DGRAM, 0);
+ if (channel->reset_recv == INVALID_SOCKET)
+ {
+ g_warning (G_STRLOC ": Error creating reset_recv socket: %s\n",
+ g_win32_error_message (WSAGetLastError ()));
+ }
+
+ if (bind (channel->reset_recv, (struct sockaddr *)&local2, sizeof (local)) == SOCKET_ERROR)
+ {
+ g_warning (G_STRLOC ": Error binding to reset_recv socket: %s\n",
+ g_win32_error_message (WSAGetLastError ()));
+ }
+
+ len = sizeof (local2);
+ if (getsockname (channel->reset_recv, (struct sockaddr *)&local2, &len) == SOCKET_ERROR)
+ {
+ g_warning (G_STRLOC ": Error getsockname with reset_recv socket: %s\n",
+ g_win32_error_message (WSAGetLastError ()));
+ }
+
+ memset (&server, 0, sizeof (server));
+ server.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
+ server.sin_family = AF_INET;
+ server.sin_port = local2.sin_port;
+
+ if (connect (channel->reset_send, (struct sockaddr *)&server, sizeof (server)) == SOCKET_ERROR)
+ {
+ g_warning (G_STRLOC ": connect to reset_recv socket: %s\n",
+ g_win32_error_message (WSAGetLastError ()));
+ }
+
+}
+