guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: open-socket-for-uri returns string, but integer is needed


From: mbcladwell
Subject: Re: open-socket-for-uri returns string, but integer is needed
Date: Sun, 31 Jan 2021 02:27:18 -0600
User-agent: Horde Application Framework 5

I confirm that I get the same results as you with respect to timing. I suspect a configuration issue because other colleagues report that

(open-socket-for-uri "https://blockchain.info/q/24hrprice";)

returns a socket integer.  I (and you) get a string.

I need to retrieve the uri output on a non-blocking port so I am trying to:

(let* ((port (open-socket-for-uri "https://blockchain.info/q/24hrprice";))
(portmod (fcntl port F_SETFL (logior O_NONBLOCK (fcntl port F_GETFD 0)))))
  (receive (response-status response-body)
(http-get "https://blockchain.info/q/24hrprice"; #:port portmod) response-body))

Even making it a one-liner does not help:

(receive (response-status response-body) (http-get "https://blockchain.info/q/24hrprice"; #:port (fcntl (open-socket-for-uri "https://blockchain.info/q/24hrprice";) F_SETFL (logior O_NONBLOCK (fcntl (open-socket-for-uri "https://blockchain.info/q/24hrprice";) F_GETFD 0)))) response-body)

 Thanks
 Mortimer

Quoting Aleix Conchillo Flaqué <aconchillo@gmail.com>:

Hi,

I've tried this on macOS and I get the following (note the port type
is not socket, but neither file):

scheme@(guile-user)> (open-socket-for-uri "https://blockchain.info/q/24hrprice";)
$7 = #<input-output: string 105b0c540>

If I do the following I get an error (see below):

scheme@(guile-user)> (define s (open-socket-for-uri
"https://blockchain.info/q/24hrprice";))

wait a bit... then:

scheme@(guile-user)> (http-request
"https://blockchain.info/q/24hrprice"; #:port s)
ice-9/boot-9.scm:1669:16: In procedure raise-exception:
Bad Read-Header-Line header: #<eof>

However, if I do the following:

scheme@(guile-user)> (http-request
"https://blockchain.info/q/24hrprice"; #:port (open-socket-for-uri
"https://blockchain.info/q/24hrprice";))

The request works fine. So, if I do the following quickly enough:

scheme@(guile-user)> (define s (open-socket-for-uri
"https://blockchain.info/q/24hrprice";))
scheme@(guile-user)> (http-request
"https://blockchain.info/q/24hrprice"; #:port s)

it works fine. So it seems a timing issue.

What is exactly failing and when in your case?

Aleix

On Sat, Jan 30, 2021 at 7:23 AM <mbcladwell@stihie.net> wrote:

Yes it is installed.

mbc@HP8300:~$ dpkg -s guile-gnutls
Package: guile-gnutls
Status: install ok installed

How do I test that it is properly configured? For example I can:

scheme@(guile-user)> (cdar (json-string->scm (utf8->string (receive
(response-status response-body)
          (http-request
"https://api.blockchain.com/v3/exchange/tickers/LTC-USD";)
response-body))))
$1 = 134.3

Thanks
Mortimer

Quoting Aleix Conchillo Flaqué <aconchillo@gmail.com>:

> Hi,
>
> This is just a guess but do you have GnuTLS Guile bindings installed? You
> are using https on the first one.
>
> In Debian I believe it's guile-gnutls.
>
> Best,
>
> Aleix
>
>
> On Sat, Jan 30, 2021, 5:38 AM <mbcladwell@stihie.net> wrote:
>
>>
>> Hi,
>> On Debian 10, Guile 3.0.4 I need to create a socket:
>>
>> mbc@HP8300:~$ guile
>> GNU Guile 3.0.4
>> Copyright (C) 1995-2020 Free Software Foundation, Inc.
>> Enter `,help' for help.
>> scheme@(guile-user)> (use-modules (web client))
>> scheme@(guile-user)> (open-socket-for-uri
>> "https://blockchain.info/q/24hrprice";)
>> $1 = #<input-output: file 7f09b60b0e00>
>> scheme@(guile-user)> (open-socket-for-uri "http://localhost:3000/123";)
>> $2 = #<input-output: socket 14>
>> scheme@(guile-user)>
>>
>> A local http looks good - returns an integer socket.
>> A remote https uri returns file 7f09b60b0e00 which is rejected by
>> downstream functions requiring a port/integer e.g. (http-get ....
>> #:port )
>>
>> I get the same results on Guile 2.2.7 in a Guix protected environment.
>> What am I doing wrong - how do I get an integer returned?
>> Thanks
>> Mortimer
>>
>>
>>









reply via email to

[Prev in Thread] Current Thread [Next in Thread]