MC 14 Oct 2004: Tcl's
socket command and non-blocking I/O makes it very easy to do all sorts of fun network things.
Here is an example to proxy/forward in just a few lines of code. I wrote this during the intro to
DRH's
SQLite talk at the
Eleventh Annual Tcl/Tk Conference, since some router somewhere between the hotel and mini.net wasn't routing properly.
set host mini.net
set port 80
set self 166.70.107.100
proc accept {sock addr p} {
global host port
set conn [socket -async $host $port]
fconfigure $sock -translation binary -buffering none -blocking 0
fconfigure $conn -translation binary -buffering none -blocking 0
fileevent $conn readable [list xfer $conn $sock]
fileevent $sock readable [list xfer $sock $conn]
}
proc xfer {from to} {
if {([eof $from] || [eof $to]) ||
([catch {read $from} data] || [catch {puts -nonewline $to $data}])} {
catch {close $from}
catch {close $to}
}
}
set server [socket -server accept -myaddr $self 80]
vwait forever
vkvalli: A
bandwidth throttling proxy based on this.
Category Networking