вот что вышло : Код (Text): invoke WSAStartup, 202h, ADDR wsa .if eax != 0 mPrintC WSAErr jmp Exit .endif invoke socket, AF_INET, SOCK_STREAM, 0 .if eax == INVALID_SOCKET mPrintC SockErr jmp Exit .endif mov sock, eax mov saddr.sin_family, AF_INET invoke inet_addr, INADDR_ANY mov saddr.sin_addr, eax invoke htons, 3334 mov saddr.sin_port, ax invoke bind, sock, ADDR saddr, sizeaddr .if eax == SOCKET_ERROR invoke GetLastError mPrintC BindErr jmp Exit .endif проблема в другом - при выполнении функции bind получаеться ошибка 271Eh - неверный указатель. И я никак не могу найти ошибку, помогите пожалуйста
> mov saddr.sin_addr, eax Судя по описанию структуры, должно быть так: mov saddr.sin_addr.S_un.S_addr,eax > sizeaddr SIZEOF sockaddr_in
Quantum > Судя по описанию структуры, должно быть так: Теоретически - да, но на практике IP всего лишь первый дворд структуры и без разницы, как его туда ложить.
Вот например код проверки занят ли порт, все железно работает, сравнивай Код (Text): .386 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib include \masm32\include\user32.inc includelib \masm32\lib\user32.lib include \masm32\include\ws2_32.inc includelib \masm32\lib\ws2_32.lib .data s_ok byte 'in use',0 .data? sa sockaddr_in <> sock DWORD ? WSAData dw 1024 dup (?) .code _main: invoke WSAStartup, 202h, addr WSAData invoke socket, AF_INET, SOCK_STREAM, 0 mov sock, eax invoke RtlZeroMemory, addr sa, sizeof sockaddr_in mov sa.sin_family, AF_INET invoke ntohs, 80 mov sa.sin_port, ax invoke bind, sock, addr sa, sizeof sockaddr_in invoke WSAGetLastError cmp eax, WSAEADDRINUSE jne ex invoke MessageBox, 0, addr s_ok, 0, 0 ex: ;exits invoke ExitProcess, 0 end _main