Search code examples
socketsnetwork-programmingipforthgforth

Does gforth contain network socket capability?


Often, when learning a language I'll write a server of some sort. Does gforth have the capability to use network sockets?

I don't see anything about sockets in the manual.


Solution

  • Though I don't see any documentation about it, there is a socket.fs which binds to libc.

    Provided under the GNU FDL, from Rossetta code by IanOsgood (commit)

    include unix/socket.fs
    
    128 constant size
    
    : (echo) ( sock buf -- sock buf )
      begin
        cr ." waiting..."
        2dup 2dup size read-socket nip
        dup 0>
      while
        ."  got: " 2dup type
        rot write-socket
      repeat
      drop drop drop ;
    
    create buf size allot
    
    : echo-server ( port -- )
      cr ." Listening on " dup .
      create-server
      dup 4 listen
      begin
        dup accept-socket
        cr ." Connection!"
        buf ['] (echo) catch
        cr ." Disconnected (" . ." )"
        drop close-socket
      again ;
    
    12321 echo-server
    

    However, ymmv

    nc localhost 12321
    PING
    PING
    PONG
    PONG
    

    There are no Keepalives so you'll logically get disconnects from that.