[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
u_short to int conversion
Cc: nrouquet@pollux, gasser@pollux
[Allegro CL, 3.0.3 on a Sequent Symmetry running Dynix V3.0.12]
I have problems to pass a port number from C to lisp.
E.g.,
int GetSockPort(Sock)
int Sock;
{
struct sockaddr_in sockad;
int len;
getsockname(Sock,(struct sockaddr *)&sockad,(int *)&len);
return(sockad.sin_port);
}
with:
(defforeign 'get-sock-port
:entry-point (convert-to-lang "GetSockPort" :language :c)
:return-type :integer
:arguments '(fixnum))
Well, when get-sock-port is called with a socket, the value returned
is correct. Many times I have had the same value for two different sockets.
I think the problem lies in the fact that the sin_port of the sockaddr
structure is declared as a u_short.
What is the correct way to declare the foreign function and/or
to define the C function?
Since I'm at it, I have a remark on the documentation of Allegro CL.
I hope that there will be a more detailed description of the Allegro CL
implementation specifics. As far as I am concerned, I have used the foreign
function interface, the multiprocessing extensions, the error functions
and all of these suffer of a common documentation problem:
Several examples are discussed to illustrate what are the facilities available
but when a really specific case is at stake, there is always a couple of details
not described. This means that I've had to browse several times the doc to see
if any example would describe a solution to my problems. I strongly encourage
you to document what is available on a function basis rather than an example basis.
As a comparative experience, I can find my way to my problems much easier with
Lucid's documentation (V3.x) rather than with Allegro's.
Nicolas Rouquette E-mail: nrouquet%pollux.usc.edu@usc.edu
Distributed AI Group Phone: (213) 743-3472
Computer Science Department MC-0782
University of Southern California
Los Angeles, CA 90089-0782