hola, tengo un pequeño problema con un codigo que hize.
include 'win32ax.inc'
.data
;Datos de Conexion.
puerto dd 123
host db '127.0.0.1',0
;Variables.
wsa WSADATA ? ;puntero a una estructura WSADATA.
sock dd ? ;Handle del socket.
conec hostent ? ;puntero a la estructura hostent
cliente sockaddr_in ? ;puntero a la estructura sockaddr_in
.code
;Funcion que se ejecuta cuando a habido algun error
proc FIND_ERROR
;limpiamos y saltamos al inicio.
call [WSACleanup]
;Limpiamos
push 2000
call [Sleep]
;Esperamos 2 segundos.
jmp start
;saltamos al inicio del programa.
endp
start :
;Cuerpo del Programa.
push wsa
push 200
call [WSAStartup]
;iniciamos la *.dll con su respectiva Version.
cmp eax,0
jz siguiente
;Comprobamos que la funcion aya sido ejecutada
;Correctamente
call FIND_ERROR
;de lo contrario, continuamos con nuestro
;programa.
siguiente :
push 6 ;IPPROTO_TCP
push 1 ;SOCK_STREAM
push 2 ;AF_INET
call [socket]
;Creamos un Identificador de Socket.
cmp eax,-1
jnz siguiente2
;si hay un error Llamamos ala funcion
;FIND_ERROR
call FIND_ERROR
siguiente2 :
mov [sock],eax;Guardamos el Handle.
mov eax,0 ;Limpiamos el Registro eax.
push host
call [gethostbyname]
mov [conec],eax ;guardamos el retorno de la funcion en
;la variable conec.
mov eax,0
push [puerto]
call [htons]
mov [cliente.sin_family],2 ;AF_INET
mov [cliente.sin_port],ax
mov eax,[conec]
mov [cliente.sin_addr],eax
push 20
push cliente
push [sock]
call[connect]
cmp eax,0
jz funciona
call FIND_ERROR
;Cerramos el proceso
push 0
call [ExitProcess]
.end start
el programa no conecta al servidor echo en C, creo que hay un problema con la funcion connect, bueno espero que alguien me pueda ayudar .
SSaludos.
la etiqueta funciona no existe, sales de un call con un jmp .... ¿quien saca de la pila la direccion de retorno?. Lee aqui (http://msdn.microsoft.com/en-us/library/ms738524%28VS.85%29.aspx). depura tu programa y veras que te esta devolviendo connect, no puedes pretender hacer que tu programa solo funcione en "una direccion" y que no sea capaz de controlar los errores que pueda devolver una funcion, volver a empezar una y otra vez no es una solucion.