[fpc-pascal] fcl-web websocket

Michael Van Canneyt michael at freepascal.org
Mon Dec 26 00:06:20 CET 2022



On Sat, 24 Dec 2022, Andrew Haines via fpc-pascal wrote:

> Hi,
>
> I am trying to test the websocket client in fcl-web by making a simple echo 
> client. I have been unable to make it work using fpc trunk on linux64. I also 
> crosscompiled to win64 and ran it on wine with identical results. The project 
> is attached here if anyone can give some hints.
>
> I am testing it with a server I found here https://github.com/vi/wsmirror 
> (written in rust) but also I tried it with some public echo servers. There is 
> a html/javascript websocket example also for testing it which is working.
>
> I have no real guesses as to the problem. I modified the server that the 
> client connects to enough to know when it receives messages and what kind. 
> The server never identifies a proper message after the connection handshake 
> is completed. It gets something but it doesn't identify it as a text message 
> or ping or close etc. The server is dropping the connection after a few 
> seconds with ss -t dport = 8080 giving this:
>
> State             Recv-Q Send-Q                         Local Address:Port
>
> CLOSE-WAIT            5 0                                127.0.0.1:47828
>
> I believe those are several ping packets the server is sending that the 
> client doesn't read.
>
> One thing the websocket is doing is disabling MSG_SIGNAL so that when the 
> pipe is broken it doesn't show an exception. However the component doesn't 
> check for this and doesn't send the disconnect event.
>
> I have made my own websocket component in the past which is working but I 
> wanted to try the one included with fpc.
>
> I'm really baffled, I spent a long time to try and find what is wrong, even 
> putting debug code in the underlying socket components. And verifying that 
> the websocket frames are correct.
>
> An oddity I noted is that TInetSocket.CanRead seems to always return false if 
> it's used as a client. I may not have understood that fully.

The FPC websocket protocol has been tested on the
'unofficial' testsuite for websocket

https://github.com/crossbario/autobahn-testsuite

and it passes all tests, and I have used it in commercial programs.
so your story is quite surprising to me.

Does the sample chat client/program work for you ?

When I have a moment, I'll look at your test program.

Michael.


More information about the fpc-pascal mailing list