Next: posix socket addresses in6, Previous: posix socket addresses local, Up: posix socket addresses [Index]
Instances of struct sockaddr_in
can be handled at the Scheme
level as follows:
(import (vicare) (prefix (vicare posix) px.)) (define sockaddr (px.make-sockaddr_in '#vu8(1 2 3 4) 88)) (px.sockaddr_in.in_addr sockaddr) ⇒ #vu8(1 2 3 4) (px.sockaddr_in.in_port sockaddr) ⇒ 88
and we can use constant values to initialise the fields:
(import (vicare) (prefix (vicare posix) px.) (vicare platform constants)) (define addr (make-bytevector 4)) (bytevector-u32-set! bv 0 INADDR_LOOPBACK (endianness big)) (define sockaddr (px.make-sockaddr_in addr 88)) (px.sockaddr_in.in_addr sockaddr) ⇒ #vu8(127 0 0 1) (px.sockaddr_in.in_port sockaddr) ⇒ 88
care must be taken when handling such raw values.
Given a bytevector host-address holding a struct in_addr
and a fixnum port representing a network port number, build and
return a bytevector holding a struct sockaddr_in
initialised with
this data.
Internally convert port to network byte order using htons()
before storing the value in the data structure.
Given a bytevector socket-address holding a struct
sockaddr_in
, extract the in_addr
and in_port
fields and
return them. If the data in socket_address is invalid: an
exception is raised.
sockaddr_in.in_addr
returns in_addr
as bytevector holding
the corresponding struct in_addr
.
(let ((sockaddr (px.make-sockaddr_in '#vu8(127 0 0 1) 88))) (px.sockaddr_in.in_addr sockaddr)) ⇒ #vu8(127 0 0 1)
sockaddr_in.in_addr.number
returns in_addr
as 32-bit
unsigned exact integer; internally it converts the address number to
host byte order using ntohl()
after the extraction of the value
from the data structure.
(let ((sockaddr (px.make-sockaddr_in '#vu8(127 0 0 1) 88))) (px.sockaddr_in.in_addr.number sockaddr)) ⇒ #x7f000001
sockaddr_in.in_port
returns in_port
as exact integer;
internally it converts the port number to host byte order using
ntohs()
after the extraction of the value from the data structure.
(let ((sockaddr (px.make-sockaddr_in '#vu8(127 0 0 1) 88))) (px.sockaddr_in.in_port sockaddr)) ⇒ 88
Next: posix socket addresses in6, Previous: posix socket addresses local, Up: posix socket addresses [Index]