[Announce] LispWorks-UDP 3.0, 2.2, and 1.1
Hi, LispWorks User Group
I'm glad to release three new versions of LispWorks-UDP, the UDP
networking support for LispWorks.
New versions can be download from sourceforge and common-lisp.net:
http://sourceforge.net/project/showfiles.php?group_id=209101&package_id=277467
http://common-lisp.net/project/cl-net-snmp/release/
[new feature in 3.0]
The biggest feature in lispworks-udp 3.0 is the "Auto-retransmit
support". Since every real UDP networking application must deal with
the timeout and retransmit issue (because UDP isn't reliable, packets
can get lost for reasons), Now I add this support as a high-level SYNC-
MESSAGE function.
The retransmit algorithm is come from TCP networking, based on Van
Jacobson's paper "Congestion Avoidance and Control" in 1988. The UDP
message sending timeout is between 2~60 seconds, which can be learnt
automatically. For sample usage, see test.lisp in the source code.
______________________
| COMM:SYNC-MESSAGE [Function]
Summary
Send (then receive) UDP message with retransmit support.
Signature
sync-message socket message &optional host service
&key (max-receive-length +max-udp-message-size+)
(encode-function #'default-rtt-function)
(decode-function #'default-rtt-function)
Arguments and Values
socket
A socket fd.
message
Anything can fit the first arguemnt of encode-function.
host
Remote hostname or IP address as string or integer
service
Remote service name or port, as string or integer
max-receive-length
Max message size when try to receive-message.
encode-function
A encode function as type of (function (t) (values sequence integer))
decode-function
A encode function as type of (function (sequence) (values t integer))
Description
SYNC-MESSAGE is a high-level UDP function. It can fit following
requirement on UDP
networking:
* Resend UDP packets when sending or receiving packet get lost.
* Compare the "sequence number" of a receiving packet to match
the sending one.
* Direct send custom message format, let encode/decode function
to do the low-level job.
For sample usage, see RTT-TEST-* functions in test.lisp
This function is added from LispWorks-UDP 3.0
See also
COMM:SEND-MESSAGE, COMM:RECEIVE-MESSAGE
[bugfix in 1.x and 2.x branch]
Recently I found SET-SOCKET-RECEIVE-TIMEOUT actually not working on
win32 platform. Version 1.1 and 2.2 fix that.
Regards,
Chun Tian (binghe)