Socket Accept/Connection Question/Problem

Dave dave at looktowindward.com
Fri Feb 29 07:08:32 EST 2008


On 28 Feb 2008, at 22:00, Alex Tweedly wrote:

> Dave wrote:
>>
>> All I want to do is to know if a Client successfully connected to  
>> a Server, surely this is what the openSocket command is for.
>>
> Not quite. The 'open socket' command does try to create the  
> connection, but it will not (immediately) tell you whether or not  
> it is successful in this attempt. From the Rev docs,
> " The handler continues executing while the connection is being  
> established. If you use the write to socket command while the  
> connection is opening, the data is buffered and is sent to the host  
> as soon as the connection is made."
>
> i.e. you will not get an indication of success or failure immediately.

Yes, I realize that the whole thing is asynchronous, when I say  
"call" I meant arrange to have a message sent at some future time.  
It's just easier to say "call".


>> Surely the:
>>
>>   open socket mySocketAddress with message "ClientSocketOpen"
>>
>> Statement should call "ClientSocketOpen" if the Server accepted  
>> the connection or call "socketError" or "socketTimeout" if there  
>> was an error? e.g. the Server closed the socket?
> Be wary of that simple word "call". the "open socket" statement  
> will not "call" ClientSocketOpen even in the successful case -  
> instead it will result in a message being sent SOME TIME LATER to  
> that handler. And in the failure  case, it will  cause a message to  
> either socketError or socketTimeOut  again, SOME TIME LATER.

Yes, the code I posted should handle that.
>
> Using the code we've discussed on the server, what you will get on  
> the client is a socketClosed message. The server will accept the  
> connection, which should result in a successful "ClientSocketOpen'  
> and then very quickly close it causing a subsequent 'socketClosed'  
> message.

Before I didn't have a "socketClosed" handler and I thought that this  
might be the missing part of the jigsaw, so I added one, and it does  
get called but not till a long time after and sometimes not at all.  
The "socketError" handler, resends the connect request after a delay  
of 2 seconds (send in time). The "socketClosed" message only seems to  
get sent after a few retries whereas it should get sent instead of  
the first "socketError", or at least during the 2 second wait before  
the connect is called again. Also the error returned is "Error 54  
reading socket", when the command that failed was a write, why is this?

Is there a list of the errors returned by the socket commands?

Thanks a Lot
All the Best
Dave

Here is a dump from the Server and Client logs:

---------------------------------------------------
SERVER LOG
--------------------------------------------------
ServerStart - Accept: 6000
192.168.1.111

ServerContactedByClient: 192.168.1.105:50642
ServerContactedByClient, Bad Client: 192.168.1.105:50642 - Closes Socket

ServerContactedByClient: 192.168.1.105:50643
ServerContactedByClient, Bad Client: 192.168.1.105:50643 - Closes Socket

ServerContactedByClient: 192.168.1.105:50644
ServerContactedByClient, Bad Client: 192.168.1.105:50644 - Closes Socket

ServerContactedByClient: 192.168.1.105:50645
ServerContactedByClient, Bad Client: 192.168.1.105:50645 - Closes Socket

ServerContactedByClient: 192.168.1.105:50646
ServerContactedByClient, Bad Client: 192.168.1.105:50646 - Closes Socket

ServerContactedByClient: 192.168.1.105:50647
ServerContactedByClient, Bad Client: 192.168.1.105:50647 - Closes Socket


---------------------------------------------------
CLIENT LOG
--------------------------------------------------

StartOneClient - Connect: 192.168.1.87:6000|looktowindward
ClientSocketOpen, Open Socket: 192.168.1.87:6000|looktowindward
ClientSocketOpen, openSockets:
192.168.1.87:6000|looktowindward

ClientSocketOpen, Write Command: 192.168.1.87:6000|looktowindward  
00000027$SYS,Connect,looktowindward
ClientSocketOpen, openSockets:
192.168.1.87:6000|looktowindward

ClientSocketConnectionDataSent, Data Written: 192.168.1.87:6000| 
looktowindward
ClientSocketConnectionDataSent, openSockets:


socketError: 192.168.1.87:6000|looktowindward Error 54 reading socket
socketError - openSockets:


StartOneClient - Connect: 192.168.1.87:6000|looktowindward
ClientSocketOpen, Open Socket: 192.168.1.87:6000|looktowindward
ClientSocketOpen, openSockets:
192.168.1.87:6000|looktowindward

ClientSocketOpen, Write Command: 192.168.1.87:6000|looktowindward  
00000027$SYS,Connect,looktowindward
ClientSocketOpen, openSockets:
192.168.1.87:6000|looktowindward

ClientSocketConnectionDataSent, Data Written: 192.168.1.87:6000| 
looktowindward
ClientSocketConnectionDataSent, openSockets:


socketError: 192.168.1.87:6000|looktowindward Error 54 reading socket
socketError - openSockets:


StartOneClient - Connect: 192.168.1.87:6000|looktowindward
ClientSocketOpen, Open Socket: 192.168.1.87:6000|looktowindward
ClientSocketOpen, openSockets:
192.168.1.87:6000|looktowindward

ClientSocketOpen, Write Command: 192.168.1.87:6000|looktowindward  
00000027$SYS,Connect,looktowindward
ClientSocketOpen, openSockets:
192.168.1.87:6000|looktowindward

ClientSocketConnectionDataSent, Data Written: 192.168.1.87:6000| 
looktowindward
ClientSocketConnectionDataSent, openSockets:


socketError: 192.168.1.87:6000|looktowindward Error 54 reading socket
socketError - openSockets:


StartOneClient - Connect: 192.168.1.87:6000|looktowindward
ClientSocketOpen, Open Socket: 192.168.1.87:6000|looktowindward
ClientSocketOpen, openSockets:
192.168.1.87:6000|looktowindward

ClientSocketOpen, Write Command: 192.168.1.87:6000|looktowindward  
00000027$SYS,Connect,looktowindward
ClientSocketOpen, openSockets:
192.168.1.87:6000|looktowindward

ClientSocketConnectionDataSent, Data Written: 192.168.1.87:6000| 
looktowindward
ClientSocketConnectionDataSent, openSockets:


socketError: 192.168.1.87:6000|looktowindward Error 54 reading socket
socketError - openSockets:


StartOneClient - Connect: 192.168.1.87:6000|looktowindward
ClientSocketOpen, Open Socket: 192.168.1.87:6000|looktowindward
ClientSocketOpen, openSockets:
192.168.1.87:6000|looktowindward

ClientSocketOpen, Write Command: 192.168.1.87:6000|looktowindward  
00000027$SYS,Connect,looktowindward
ClientSocketOpen, openSockets:
192.168.1.87:6000|looktowindward

ClientSocketConnectionDataSent, Data Written: 192.168.1.87:6000| 
looktowindward
ClientSocketConnectionDataSent, openSockets:


socketError: 192.168.1.87:6000|looktowindward Error 54 reading socket
socketError - openSockets:


StartOneClient - Connect: 192.168.1.87:6000|looktowindward
ClientSocketOpen, Open Socket: 192.168.1.87:6000|looktowindward
ClientSocketOpen, openSockets:
192.168.1.87:6000|looktowindward

ClientSocketOpen, Write Command: 192.168.1.87:6000|looktowindward  
00000027$SYS,Connect,looktowindward
ClientSocketOpen, openSockets:
192.168.1.87:6000|looktowindward

ClientSocketConnectionDataSent, Data Written: 192.168.1.87:6000| 
looktowindward
ClientSocketConnectionDataSent, openSockets:


socketClosed: 192.168.1.87:6000|looktowindward    ********* AT LAST a  
socketClosed message ********










More information about the Use-livecode mailing list