section .bss
wsadata resb 408 ; sizeof(WSADATA)
section .data
IP0 EQU 188
IP1 EQU 187
IP2 EQU 188
IP3 EQU 179
AF_INET EQU 2
IPPROTO_TCP EQU 6
SOCK_STREAM EQU 1
sockaddr_in dd 0, 0, 0, 0 ; 16 bytes : sizeof(SOCKADDR_IN)
socket dd 0
errorCreatingSocket db "Error creating socket", 0Dh, 0Ah
errorCreatingSocketLen EQU $-errorCreatingSocket
errorCreatingConnect db "Error creating connect", 0Dh, 0Ah
errorCreatingConnectLen EQU $-errorCreatingConnect
errorSendingData db "Error sending data", 0Dh, 0Ah
errorSendingDataLen EQU $-errorSendingData
section .text
_start:
mov al, 2
mov ah, 2
push wsadata
push eax
call _WSAStartup@8
test eax, eax
jnz error
mov byte [sockaddr_in + 1], AF_INET ; sin_family
mov byte [sockaddr_in + 2], 80 ; sin_port[0]
mov byte [sockaddr_in + 3], 0 ; sin_port[1]
mov byte [sockaddr_in + 4], IP0
mov byte [sockaddr_in + 5], IP1
mov byte [sockaddr_in + 6], IP2 ;IN_ADDR structure
mov byte [sockaddr_in + 7], IP3
push IPPROTO_TCP
push SOCK_STREAM
push AF_INET
call _socket@12
mov ebx, errorCreatingSocket
mov edx, errorCreatingSocketLen
cmp eax, -1
je error
mov dword [socket], eax
push 16
push sockaddr_in
push dword [socket]
call _connect@12
mov ebx, errorCreatingConnect
mov edx, errorCreatingConnectLen
cmp eax, -1
je error
push 0
push msgRequestLen
push msgRequest
push dword [socket]
call _send@16
mov ebx, errorSendingData
mov edx, errorSendingDataLen
cmp eax, -1
je error
push 0
push 8128
push buffer
push dword [socket]
call _recv@16
mov dword [requestLength], eax
exit:
push 0
call _ExitProcess@4
Выполнение программы проходит успешно до вызова _connect@12 - в EAX попадает -1, что свидетельствует об ошибке. LastError показывает WSAEAFNOSUPPORT (адрес не подходит для выбранного семейства адресов). Содержимое памяти по адресу sockaddr_in :
00 02 50 00 bc bb bc b3 00 00 00 00 00 00 00 00
Первые 2 байта указывают на принадлежность сокета к AF_INET, вторые 2 указывают на 80 порт, причем и адрес и порт указаны в big-endian, потому что мой процессор работает с little-endian. В следующих 4 байтах адрес сервера и следующие 8 пустые
Вроде сделал все правильно, подскажите пожалуйста - что может быть не так