Re: scsh vs. scheme48 socket

Martin Gasbichler <[email protected]> Mon, 19 Dec 2005 09:09:07 +0100
Newsgroups gmane.lisp.scheme.scsh
Message-ID <[email protected]>
Immanuel Normann <[email protected]> writes:

> Martin Gasbichler wrote:
>
>>Immanuel Normann <[email protected]> writes:
>
>>Could you please post the scsh program as well as the error message
>>you get?
>>
>>
> Take it simply as it is:
>
>  > ,open sockets extended-ports
>
>  > (define (ask-server request port-number)
>   (call-with-values
>     (lambda ()
>       (socket-client (get-host-name) port-number))
>     (lambda (in out)
>        (display request out)
>        (close-output-port out)
>        (let ((answer (make-string-input-port in))) ; returns any
>        server response into some string
>       (close-input-port in)
>       answer))))
>
>  > (ask-server "something" 8080)

Ah, so you're using the S48-API within scsh. The problems you see are
maybe due to bugs in the S48 version that scsh is based on. 

> Anyway, how would I solve the task in scsh with its elaborated socket
> functions?

Well, just use the first procedure described in the scsh network API:

(define (ask-server request host-name port-number)
  (let ((socket (socket-connect protocol-family/internet 
                                socket-type/stream 
                                host-name 
                                port-number)))
    (display request (socket:outport socket)) ;; maybe you have to add NEWLINE here 
    (let ((answer (make-string-input-port (socket:inport socket))))
      (close-socket socket)
      answer)))

[Untested code]

-- 
Martin