Код (Text): .386 .model flat,stdcall option casemap:none include d:\masm32\include\windows.inc include d:\masm32\include\kernel32.inc include d:\masm32\include\user32.inc include d:\masm32\include\masm32.inc include d:\masm32\include\advapi32.inc include d:\masm32\include\ws2_32.inc includelib d:\masm32\lib\kernel32.lib includelib d:\masm32\lib\user32.lib includelib d:\masm32\lib\masm32.lib includelib d:\masm32\lib\advapi32.lib includelib d:\masm32\lib\ws2_32.lib .data buf db "!",0 dest_ip db "127.0.0.1",0 err db "Error",0 succ db "Success",0 err_create db "WSASocket error",0 err_sendto db "WSASendTo error",0 .data? ws WSADATA <> udp_socket SOCKET <> peer sockaddr_in <> wsaol WSAOVERLAPPED <> wsabuf WSABUF <> nres dd ? nerr dd ? .code start: invoke WSAStartup,202h,offset ws invoke WSASocket,AF_INET,SOCK_DGRAM,IPPROTO_UDP,NULL,NULL,WSA_FLAG_OVERLAPPED mov udp_socket,eax .if(eax==INVALID_SOCKET) invoke WSAGetLastError invoke dwtoa,eax,offset nerr invoke MessageBox,NULL,offset nerr,offset err_create,MB_OK .endif mov peer.sin_family,AF_INET invoke htons,10000 mov peer.sin_port,ax invoke inet_addr,offset dest_ip mov peer.sin_addr.S_un.S_addr,eax mov wsabuf.len,SIZEOF buf mov wsabuf.buf,offset buf invoke WSACreateEvent mov wsaol.hEvent,eax invoke WSASendTo,udp_socket,offset wsabuf,1,offset nres,NULL,offset peer,SIZEOF peer,offset wsaol,NULL .if(eax==SOCKET_ERROR) invoke WSAGetLastError invoke dwtoa,eax,offset nerr invoke MessageBox,NULL,offset nerr,offset err_sendto,MB_OK .endif invoke WSACloseEvent,wsaol.hEvent invoke closesocket,udp_socket invoke WSACleanup invoke ExitProcess,NULL end start Выдает ошибку блок передачи через WSASendto под номером 10014,нашел на форуме подобную проблему http://wasm.ru/forum/viewtopic.php?id=26704&p=1. Там она была решена неоднозначно,хочется найти ответ конкретный. Использовать Sendto не предлагать.
Правил код слегка Код (Text): ... sendmsg proc LOCAL wsabuf:WSABUF mov wsabuf.len,SIZEOF buf mov wsabuf.buf,offset buf invoke WSASendTo,udp_socket,addr wsabuf,1,offset nres,NULL,offset peer,SIZEOF peer,offset wsaol,NULL sendmsg endp ... Выполняется успешно, в nres возвращает длину буфера - проверил. Остается вопрос,why?
Для будущих искателей,решение проблемы: Код (Text): ... .data? ... ALIGN DWORD wsabuf WSABUF <> ... Переменную wsabuf выравниваем на DWORD, в связи с http://rs1.szif.hu/~tomcat/win32/win32asm.txt.Всем спасибо.)