Si rax es -1 quiere decir que fallo y entonces hay que llamar a GetLastError.
LastErrorValue: (WinSock) 0x273f (10047) - An address incompatible with the requested protocol was used.
ws2_32!connect:
mov rax,rsp
mov qword ptr [rax+8],rbx
mov qword ptr [rax+10h],rbp
mov qword ptr [rax+18h],rsi
Antes de poder usar la memoria del segundo parametro, RDX, esta ya fue modificada por el prologo de connect para preservar registros.
"In the Microsoft x64 calling convention, it is the caller's responsibility to allocate 32 bytes of "shadow space" on the stack right before calling the function (regardless of the actual number of parameters used), and to pop the stack after the call.
For example, a function taking 5 integer arguments will take the first to fourth in registers, and the fifth will be pushed on top of the shadow space. So when the called function is entered, the stack will be composed of (in ascending order) the return address, followed by the shadow space (32 bytes) followed by the fifth parameter."
https://en.wikipedia.org/wiki/X86_calling_conventions#Microsoft_x64_calling_conventionEn definitiva tu programa no cumple con la convencion de llamada, justo despues de la direccion de retorno esta ubicado el segundo parametro de connect.