[plt-scheme] FFI - C file handles -> scheme ports
> If I understand, then the question is Windows-specific.
>
> Under Unix, a socket is a file descriptor, and
> scheme_make_fd_input_port() is ok. Under Windows,
> scheme_make_fd_input_port() actually works with file handles, which
> have the C type HANDLE, and it does not work with Windows sockets.
>
> So, I think the question is whether there's anything exported by
> MzScheme's C API that is like scheme_make_fd_input_port() but for
> Windows sockets.
>
> Internally, there is such a function. It's not currently exposed in the
> C API. Would it be useful for me to change MzScheme so that it's
> exposed?
>
That's exactly what I was hoping for. The SQLite library has a busy
handler mechanism,
but PostgreSQL hasn't. PostgreSQL asks the library user to do a select
on the socket
returned by a call to PQsocket() to see if any data should be read.
This looks like a good way to wait on results from PostgeSQL using
libpq. However,
I'm currently looking at spgsql.plt from PLaneT to replace the SQLID
psql driver.
In that case I would not need the FFI for postgreSQL, however, I don't
know about
the performance of this package.
--hans
>
> Another approach is to just create ports in Scheme using
> `make-input-port' and `make-output-port', and implement the various
> callbacks by using the FFI to access recv(), etc.
>
> The hardest part of this strategy is implementing the evt to indicate
> when data is available or when data can be written. To do that, you
> need to create a new type of evt via scheme_add_evt(), where the wakeup
> function uses scheme_fdset() (which, confusingly enough, works on
> sockets and not file handles under Windows).
>
> Matthew
>
>
>