Autor
|
Tema: Solucionar WSAEWOULDBLOCK (Leído 3,598 veces)
|
Vaagish
Desconectado
Mensajes: 875
|
Hola amigos! Tengo el siguiente problema que me esta torturando... ya llevo horasss... Bueno, el codigo primero: Conn: invoke connect, sock, addr sa, sizeof sa .IF eax==SOCKET_ERROR invoke WSAGetLastError
.IF eax==WSAEWOULDBLOCK jmp Conn .ELSEIF eax==WSAEALREADY jmp Conn .ELSE
;Por lo general, conexion establecida u otro ErrorCode
.ENDIF
.ENDIF
Ok,, estoy usando el ejemplo de Iczelion, con Socket y procedimiento de ventana... El problema esta en que la conexion queda trancada en error: WSAEWOULDBLOCK, y por lo que entendi de este error es algo asi como: "Dame un minuto que estoy intentando conectar" jajaja Bueno, no es asi literalmente, pero seria algo asi, "socket ocupado". Como el ejemplo funciona con procedimientos de ventana, el programa se cuelga al quedar en un bucle de conexion infinito, (intentando conectar y haciendo loop en volver a conectar...) entonces la ventana no aparece siquiera.. Se me ocurre poner un timer, pero no tengo ni idea por donde empezar... Alguna sugerencia o algun metodo timer pleaseee!! Thnks all !!
|
|
|
En línea
|
|
|
|
MCKSys Argentina
|
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
Nuu, es verdad.. como me olvide del select.. Muchas gracias MCKSys! Voy a intentarlo, si no lo logro sigo este hilo.. EDITADO: Bueno, había escrito un montón de cosas y se me expiro la sesión, así que voy a ser breve... La msdn dice que no puedo usar o que no seria lo correcto ( entiendo yo ) usar select porque estoy usando WSAAsyncSelect, y cuando conecta me envía FD_CONNECT como un mensaje a la ventana,, eso todo bien... el problema es que al parecer, connect se pisa el palito comparado con: Conn: invoke connect.... cmp eax, 0 jne Conn o sea, me fijo si me conecte demasiado rápido y no le doy tiempo a connect... parece que volví al principio... timer quizás ?
|
|
« Última modificación: 16 Mayo 2013, 21:10 pm por Vaagish »
|
En línea
|
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
Ok! Solucionado... ...
.ELSEIF uMsg==WM_SOCK mov edx, lParam .IF dx==FD_CONNECT shr edx, 16 .IF dx==NULL ;Conexion establecida invoke send, sock, addr szSockStr, sizeof szSockStr, 0 .ELSE ;Error mov eax, OFFSET ThreadProc invoke CreateThread, NULL, NULL, eax, NULL, NORMAL_PRIORITY_CLASS, ADDR ThreadID invoke CloseHandle, eax .ENDIF
Listo.. he ahi la solucion.. vale aclarar que la conexion la hace un hilo.. asi no me tranca la ventana.. Y esta bueno comentar que si uso esto: invoke CreateThread, NULL, NULL, eax, NULL, CREATE_SUSPENDED, ADDR ThreadID O sea, le pongo la flag CREATE_SUSPENDED, y luego resumethread, el antivirus salta como pelota de goma jajaja Conste que mis .IF y .ELSEIF estaban bien ubicados
|
|
« Última modificación: 16 Mayo 2013, 22:07 pm por Vaagish »
|
En línea
|
|
|
|
|
|