static int
dco_connect_wait(HANDLE handle, OVERLAPPED *ov, int timeout, volatile int *signal_received)
{
+ /* GetOverlappedResultEx is available starting from Windows 8 */
+ typedef BOOL (*get_overlapped_result_ex_t) (HANDLE, LPOVERLAPPED, LPDWORD, DWORD, BOOL);
+ get_overlapped_result_ex_t get_overlapped_result_ex =
+ (get_overlapped_result_ex_t)GetProcAddress(GetModuleHandle("Kernel32.dll"),
+ "GetOverlappedResultEx");
+
+ if (get_overlapped_result_ex == NULL)
+ {
+ msg(M_ERR, "Failed to load GetOverlappedResult()");
+ }
+
DWORD timeout_msec = timeout * 1000;
const int poll_interval_ms = 50;
timeout_msec -= poll_interval_ms;
DWORD transferred;
- if (GetOverlappedResultEx(handle, ov, &transferred, poll_interval_ms, FALSE) != 0)
+ if (get_overlapped_result_ex(handle, ov, &transferred, poll_interval_ms, FALSE) != 0)
{
/* TCP connection established by dco */
return 0;