FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Sockets Error 10060
Posts: 298
Joined: Fri Oct 07, 2005 05:20 AM
Sockets Error 10060
Posted: Wed May 14, 2008 01:33 AM
Hola a todos:

Cuando hago hago una conexi贸n a un puerto y este no esta abierto, la aplicaci贸n me devuelve el error 10060.

La descripci贸n del error es "Time-out error ".

Hasta ah铆 todo funciona muy bien.

Lo que no he podido controlar es que mi aplicaci贸n no permita ejecutar otra acci贸n hasta que el socket reciba el mensaje del error y aut贸maticamente se cierre.

Esta es la funci贸n que estoy usando :

FUNCTION Client( oWnd )
   LOCAL cIp
   LOCAL cServer
   LOCAL nPort := 2510

   oSocket := TSocket():New( nPort )

   oSocket:bRead := { | oSocket | OnReadClient( oSocket ) }
   oSocket:bConnect := { | oSocket , nErrorCode  | ClientSend( oSocket , nErrorCode ) }
   oSocket:bClose := { || MsgInfo( "El Servidor cerro la sesion" ) , GetApp():oWnd:End() }
   oSocket:Connect( GetApp():cServer , nPort )

   oSocket:Listen()


RETURN( NIL )

FUNCTION ClientSend( oSocket , nError )

   IF nError == 0
      oSocket:SendData( "START "+GetHostName()+ " conectado desde "+ oSocket:cIPAddr+ " a las "+Time())
   ELSE
      MsgStop( "Error conexion..." + Str( nError ) +CRLF )
      GetApp():oWnd:End()
   ENDIF

RETURN( NIL )


EL c贸digo funciona, sin embargo el periodo de respuesta es cuando menos 45 segundos y durante ese periodo de tiempo el sistema permite hacer cualquier acci贸n.

Hay alguna manera de que pueda controlar eso ?
Vikthor
Posts: 298
Joined: Fri Oct 07, 2005 05:20 AM
Re: Sockets Error 10060
Posted: Fri May 16, 2008 12:04 AM
:-) Alguna pistita

Vikthor wrote:Hola a todos:

Cuando hago hago una conexi贸n a un puerto y este no esta abierto, la aplicaci贸n me devuelve el error 10060.

La descripci贸n del error es "Time-out error ".

Hasta ah铆 todo funciona muy bien.

Lo que no he podido controlar es que mi aplicaci贸n no permita ejecutar otra acci贸n hasta que el socket reciba el mensaje del error y aut贸maticamente se cierre.

Esta es la funci贸n que estoy usando :

FUNCTION Client( oWnd )
   LOCAL cIp
   LOCAL cServer
   LOCAL nPort := 2510

   oSocket := TSocket():New( nPort )

   oSocket:bRead := { | oSocket | OnReadClient( oSocket ) }
   oSocket:bConnect := { | oSocket , nErrorCode  | ClientSend( oSocket , nErrorCode ) }
   oSocket:bClose := { || MsgInfo( "El Servidor cerro la sesion" ) , GetApp():oWnd:End() }
   oSocket:Connect( GetApp():cServer , nPort )

   oSocket:Listen()


RETURN( NIL )

FUNCTION ClientSend( oSocket , nError )

   IF nError == 0
      oSocket:SendData( "START "+GetHostName()+ " conectado desde "+ oSocket:cIPAddr+ " a las "+Time())
   ELSE
      MsgStop( "Error conexion..." + Str( nError ) +CRLF )
      GetApp():oWnd:End()
   ENDIF

RETURN( NIL )


EL c贸digo funciona, sin embargo el periodo de respuesta es cuando menos 45 segundos y durante ese periodo de tiempo el sistema permite hacer cualquier acci贸n.

Hay alguna manera de que pueda controlar eso ?
Vikthor
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Sockets Error 10060
Posted: Fri May 16, 2008 05:01 PM

Vikthor,

Depende de que la conexi贸n sea s铆ncrona 贸 as铆ncrona.
Sincrona fuerza a esperar y no deja hacer nada mientras tanto.

La clase TSocket llama a WSAAsyncSelect(). No habr铆a que llamar a esa funci贸n para forzar que sea una comunicaci贸n s铆ncrona. Habr铆a que probarlo.

Otra opci贸n es deshabilitar la ventana principal con oWnd:Disable() para que el usuario no pueda hacer nada, y habilitarla con oWnd:Enable() cuando se establezca la conexi贸n.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 298
Joined: Fri Oct 07, 2005 05:20 AM
Sockets Error 10060
Posted: Fri May 16, 2008 05:39 PM
revisando la clase tSocket
   WSAAsyncSelect( ::nSocket, WndMain():hWnd, WM_ASYNCSELECT,;
      nOr( FD_ACCEPT, FD_OOB, FD_READ, FD_CLOSE, FD_CONNECT, FD_WRITE ) )


En FW se usan socket as铆ncronos. :-)

Gracias



Antonio Linares wrote:Vikthor,

Depende de que la conexi贸n sea s铆ncrona 贸 as铆ncrona.
Sincrona fuerza a esperar y no deja hacer nada mientras tanto.

La clase TSocket llama a WSAAsyncSelect(). No habr铆a que llamar a esa funci贸n para forzar que sea una comunicaci贸n s铆ncrona. Habr铆a que probarlo.

Otra opci贸n es deshabilitar la ventana principal con oWnd:Disable() para que el usuario no pueda hacer nada, y habilitarla con oWnd:Enable() cuando se establezca la conexi贸n.
[/code]
Vikthor

Continue the discussion