io.sockets: receive directly into byte array

db4
Joe Groff 2011-10-16 22:57:32 -07:00
parent 20e49c273f
commit 5d0ff43613
1 changed files with 7 additions and 12 deletions

View File

@ -8,7 +8,8 @@ grouping init io.backend io.binary io.encodings
io.encodings.ascii io.encodings.binary io.pathnames io.ports
io.streams.duplex kernel libc locals math math.parser memoize
namespaces parser present sequences splitting strings summary
system unix.ffi values vocabs.loader vocabs.parser ;
system unix.ffi values vocabs.loader vocabs.parser
sequences.private ;
IN: io.sockets
<< {
@ -373,23 +374,17 @@ SYMBOL: remote-address
[ (receive) ] [ addr>> ] bi parse-sockaddr ; inline
CONSTANT: datagram-size 65536
STRUCT: datagram-buf { buf uchar[datagram-size] } ;
:: receive ( datagram -- packet addrspec )
{ datagram-buf } [| buf |
datagram-size buf datagram
receive-unsafe :> ( count addrspec )
count [ f f ] [
buf swap memory>byte-array addrspec
] if-zero
] with-scoped-allocation ; inline
datagram-size (byte-array) :> buf
datagram-size buf datagram
receive-unsafe :> ( count addrspec )
count buf resize addrspec ; inline
:: receive-into ( buf datagram -- buf-slice addrspec )
buf length :> n
n buf datagram receive-unsafe :> ( count addrspec )
count [ f f ] [ drop
buf count head-slice addrspec
] if-zero ; inline
buf count head-slice addrspec ; inline
: send ( packet addrspec datagram -- )
check-send (send) ; inline