From a1b232dc0de4ba77106b15ae20e27ab712fadb2f Mon Sep 17 00:00:00 2001 From: Julian Noble Date: Wed, 8 Jul 2026 03:46:36 +1000 Subject: [PATCH] vendored tcludp 1.0.12 -> 1.0.13 in tcl9 kit vfs folders - G-036 wedge remedy - 0.4.3 tcludp 1.0.13 (user-placed in src/vendorlib_tcl9/win32-x86_64) copied into punk9win.vfs/lib_tcl9 and punk9win_for_tkruntime.vfs/lib_tcl9, udp1.0.12 removed (no mixed-version provision). 1.0.12's Windows per-thread exit handler UDP_ExitProc closed the process-global tcludp synchronization events at every udp-loaded thread exit - the G-036 wedge root cause, fixed upstream in 1.0.13 (UdpThreadExitProc + ExitSockets split). Verified: rebuilt punk902z reports package require udp = 1.0.13; G-036 regression batch under wedge conditions (hidden console, syslog-forced runtag logger, mid-session udp worker death) shows run-2 syslog workers all alive - baseline on 1.0.12 was wedged 4/4. The manual vfs copy was required because make.tcl libs/vfscommonupdate/ project do not propagate vendorlib_tcl platform libraries into kit vfs lib_tcl trees (goal G-037). punk8win.vfs (8.6) still bundles udp 1.0.12 - same code, immunity unexplained, swap pending decision. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com --- CHANGELOG.md | 8 + goals/G-036-tcl9-udp-console-worker-wedge.md | 10 + punkproject.toml | 2 +- .../tcludp1.0.13}/demos/broadcast.tcl | 78 ++--- .../tcludp1.0.13}/demos/bug1158628.tcl | 112 +++--- .../win32-x86_64/tcludp1.0.13}/demos/chat.tcl | 162 ++++----- .../tcludp1.0.13}/demos/multicast.tcl | 90 ++--- .../tcludp1.0.13}/demos/udpcat.tcl | 130 +++---- .../win32-x86_64/tcludp1.0.13}/pkgIndex.tcl | 10 +- .../win32-x86_64/tcludp1.0.13/tcl9udp1013.dll | Bin 0 -> 31744 bytes .../win32-x86_64/tcludp1.0.13}/udp.html | 8 +- .../win32-x86_64/tcludp1.0.13/udp1013t.dll | Bin 0 -> 30720 bytes .../tcludp1.0.13}/demos/broadcast.tcl | 78 ++--- .../tcludp1.0.13}/demos/bug1158628.tcl | 112 +++--- .../demos/chat.tcl | 162 ++++----- .../demos/multicast.tcl | 90 ++--- .../lib_tcl9/tcludp1.0.13}/demos/udpcat.tcl | 130 +++---- .../lib_tcl9/tcludp1.0.13}/pkgIndex.tcl | 10 +- .../lib_tcl9/tcludp1.0.13/tcl9udp1013.dll | Bin 0 -> 31744 bytes .../lib_tcl9/tcludp1.0.13}/udp.html | 8 +- .../lib_tcl9/tcludp1.0.13/udp1013t.dll | Bin 0 -> 30720 bytes .../lib_tcl9/udp1.0.12/tcl9udp1012.dll | Bin 31744 -> 0 bytes .../lib_tcl9/tcludp1.0.13/demos/broadcast.tcl | 39 +++ .../tcludp1.0.13/demos/bug1158628.tcl | 56 +++ .../lib_tcl9/tcludp1.0.13/demos/chat.tcl | 81 +++++ .../lib_tcl9/tcludp1.0.13/demos/multicast.tcl | 45 +++ .../lib_tcl9/tcludp1.0.13/demos/udpcat.tcl | 65 ++++ .../lib_tcl9/tcludp1.0.13/pkgIndex.tcl | 33 ++ .../lib_tcl9/tcludp1.0.13/tcl9udp1013.dll | Bin 0 -> 31744 bytes .../lib_tcl9/tcludp1.0.13/udp.html | 326 ++++++++++++++++++ .../lib_tcl9/tcludp1.0.13/udp1013t.dll | Bin 0 -> 30720 bytes .../lib_tcl9/udp1.0.12/tcl9udp1012.dll | Bin 31744 -> 0 bytes 32 files changed, 1254 insertions(+), 591 deletions(-) rename src/{vfs/punk9win.vfs/lib_tcl9/udp1.0.12 => vendorlib_tcl9/win32-x86_64/tcludp1.0.13}/demos/broadcast.tcl (96%) rename src/{vfs/punk9win.vfs/lib_tcl9/udp1.0.12 => vendorlib_tcl9/win32-x86_64/tcludp1.0.13}/demos/bug1158628.tcl (96%) rename src/{vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12 => vendorlib_tcl9/win32-x86_64/tcludp1.0.13}/demos/chat.tcl (96%) rename src/{vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12 => vendorlib_tcl9/win32-x86_64/tcludp1.0.13}/demos/multicast.tcl (96%) rename src/{vfs/punk9win.vfs/lib_tcl9/udp1.0.12 => vendorlib_tcl9/win32-x86_64/tcludp1.0.13}/demos/udpcat.tcl (96%) rename src/{vfs/punk9win.vfs/lib_tcl9/udp1.0.12 => vendorlib_tcl9/win32-x86_64/tcludp1.0.13}/pkgIndex.tcl (66%) create mode 100644 src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/tcl9udp1013.dll rename src/{vfs/punk9win.vfs/lib_tcl9/udp1.0.12 => vendorlib_tcl9/win32-x86_64/tcludp1.0.13}/udp.html (96%) create mode 100644 src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/udp1013t.dll rename src/vfs/{punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12 => punk9win.vfs/lib_tcl9/tcludp1.0.13}/demos/broadcast.tcl (96%) rename src/vfs/{punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12 => punk9win.vfs/lib_tcl9/tcludp1.0.13}/demos/bug1158628.tcl (96%) rename src/vfs/punk9win.vfs/lib_tcl9/{udp1.0.12 => tcludp1.0.13}/demos/chat.tcl (96%) rename src/vfs/punk9win.vfs/lib_tcl9/{udp1.0.12 => tcludp1.0.13}/demos/multicast.tcl (96%) rename src/vfs/{punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12 => punk9win.vfs/lib_tcl9/tcludp1.0.13}/demos/udpcat.tcl (96%) rename src/vfs/{punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12 => punk9win.vfs/lib_tcl9/tcludp1.0.13}/pkgIndex.tcl (66%) create mode 100644 src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/tcl9udp1013.dll rename src/vfs/{punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12 => punk9win.vfs/lib_tcl9/tcludp1.0.13}/udp.html (96%) create mode 100644 src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/udp1013t.dll delete mode 100644 src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/tcl9udp1012.dll create mode 100644 src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/broadcast.tcl create mode 100644 src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/bug1158628.tcl create mode 100644 src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/chat.tcl create mode 100644 src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/multicast.tcl create mode 100644 src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/udpcat.tcl create mode 100644 src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/pkgIndex.tcl create mode 100644 src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/tcl9udp1013.dll create mode 100644 src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/udp.html create mode 100644 src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/udp1013t.dll delete mode 100644 src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/tcl9udp1012.dll diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b448606..49feef3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ The latest `## [X.Y.Z]` header must match the `version` field in `punkproject.to Entries are newest-first; one bullet per notable change. See the root `AGENTS.md` "Project Versioning" section for the bump policy. +## [0.4.3] - 2026-07-08 + +- vendored tcludp upgraded 1.0.12 -> 1.0.13 in the tcl9 kit vfs folders (punk9win.vfs, punk9win_for_tkruntime.vfs) and src/vendorlib_tcl9 — 1.0.12's Windows per-thread exit handler closed the process-global tcludp synchronization events, so the first udp-loaded worker thread to die froze every other udp-loaded thread's event loop (root cause of the G-036 wedge; fixed upstream in 1.0.13). Verified with the G-036 regression harness: run-2 syslog workers alive (baseline on 1.0.12: wedged 4/4). Note: punk8win.vfs still bundles udp 1.0.12 (8.6 appeared immune; pending decision). The manual vfs copy was required because `libs`/`vfscommonupdate`/`project` do not propagate vendorlib_tcl platform libraries into kit vfs lib_tcl trees — gap recorded as goal G-037. + +## [0.4.2] - 2026-07-08 + +- piped-stdin exit/quit hang fixed (shellthread 1.6.3, shellfilter 0.2.4): repl/app teardown no longer blocks forever when a shellthread worker's event loop has wedged — unsubscribe's settings-reset send is now async, shutdown_free_threads keeps its timeout armed across all waits, and shellfilter::run honors its -syslog option (default empty -> no runtag log worker thread) instead of a hardcoded 127.0.0.1:514 debug leftover. Syslog remains supported when explicitly configured. Diagnosis and residual root-cause work tracked as goal G-036. + ## [0.4.1] - 2026-07-07 - `script` subcommand now matches `tclsh` for GUI scripts: if the script leaves a registered Tk main loop (Tk loaded with a live main window), the event loop is serviced until the last window closes, instead of sourcing-then-exiting immediately. So a Tk script with no explicit `exit` (or one that exits from an `after` callback, like `scriptlib/tktimer.tcl`) stays alive and runs — previously it flashed and died, and `shell` was needed as a workaround (relevant to G-020 GUI automation). Console scripts are unaffected; a script that errors exits at once (no hanging window). Verified on both generations. diff --git a/goals/G-036-tcl9-udp-console-worker-wedge.md b/goals/G-036-tcl9-udp-console-worker-wedge.md index 66c15d1a..223c6798 100644 --- a/goals/G-036-tcl9-udp-console-worker-wedge.md +++ b/goals/G-036-tcl9-udp-console-worker-wedge.md @@ -259,6 +259,16 @@ handler: closes the events). No upstream report needed for the killer bug. = 1.0.12). Re-verify with the in-context batch harness after the upgrade (baseline: punk902z run-2 syslog workers wedged 4/4 -> expect 4/4 alive). +**Upgrade DONE and VERIFIED 2026-07-08 (project 0.4.3)**: tcludp 1.0.13 placed in +src/vendorlib_tcl9/win32-x86_64 and copied manually into punk9win.vfs/lib_tcl9 and +punk9win_for_tkruntime.vfs/lib_tcl9 (udp1.0.12 removed); rebuilt kit reports +`package require udp` = 1.0.13; regression batch (hidden-console, syslog force-toggled, +same conditions as the wedged baseline): run-2 syslog workers ALL ALIVE across runs. The +manual vfs copy was needed because make.tcl libs/vfscommonupdate/project do not propagate +vendorlib_tcl platform libs into kit vfs lib_tcl trees - gap recorded as goal G-037. +punk8win.vfs (8.6) still bundles udp 1.0.12 - same buggy code, immunity unexplained +(pending decision whether to swap in 1.0.13's udp1013t.dll for the 8.x kit too). + Loose ends / optional follow-ups: - Check which tcludp the punksys (8.6) kit bundles and why 8.6 appeared immune (different udp version, different exit-handler ordering, or fast-fail luck). diff --git a/punkproject.toml b/punkproject.toml index 349f36e7..0f2795e1 100644 --- a/punkproject.toml +++ b/punkproject.toml @@ -1,3 +1,3 @@ [project] name = "punkshell" -version = "0.4.2" +version = "0.4.3" diff --git a/src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/demos/broadcast.tcl b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/demos/broadcast.tcl similarity index 96% rename from src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/demos/broadcast.tcl rename to src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/demos/broadcast.tcl index a5badc5a..e4c1bfbc 100644 --- a/src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/demos/broadcast.tcl +++ b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/demos/broadcast.tcl @@ -1,39 +1,39 @@ -#!/usr/bin/env tclsh -# multicast.tcl - Copyright (C) 2004 Pat Thoyts -# -# Demonstrate the use of broadcast UDP sockets. -# -# You can send to ths using netcat: -# echo HELLO | nc -u 192.168.255.255 7772 -# -# $Id: broadcast.tcl,v 1.1 2004/11/22 23:48:47 patthoyts Exp $ - -package require udp 1.0.6 - -proc udpEvent {chan} { - set data [read $chan] - set peer [fconfigure $chan -peer] - puts "$peer [string length $data] '$data'" - if {[string match "QUIT*" $data]} { - close $chan - set ::forever 1 - } - return -} - -# Select a subnet and the port number. -set subnet 192.168.255.255 -set port 7772 - -# Create a listening socket and configure for sending too. -set s [udp_open $port] -fconfigure $s -buffering none -blocking 0 -fconfigure $s -broadcast 1 -remote [list $subnet $port] -fileevent $s readable [list udpEvent $s] - -# Announce our presence and run -puts -nonewline $s "hello, world" -set forever 0 -vwait ::forever - -exit +#!/usr/bin/env tclsh +# multicast.tcl - Copyright (C) 2004 Pat Thoyts +# +# Demonstrate the use of broadcast UDP sockets. +# +# You can send to ths using netcat: +# echo HELLO | nc -u 192.168.255.255 7772 +# +# $Id: broadcast.tcl,v 1.1 2004/11/22 23:48:47 patthoyts Exp $ + +package require udp 1.0.6 + +proc udpEvent {chan} { + set data [read $chan] + set peer [fconfigure $chan -peer] + puts "$peer [string length $data] '$data'" + if {[string match "QUIT*" $data]} { + close $chan + set ::forever 1 + } + return +} + +# Select a subnet and the port number. +set subnet 192.168.255.255 +set port 7772 + +# Create a listening socket and configure for sending too. +set s [udp_open $port] +fconfigure $s -buffering none -blocking 0 +fconfigure $s -broadcast 1 -remote [list $subnet $port] +fileevent $s readable [list udpEvent $s] + +# Announce our presence and run +puts -nonewline $s "hello, world" +set forever 0 +vwait ::forever + +exit diff --git a/src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/demos/bug1158628.tcl b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/demos/bug1158628.tcl similarity index 96% rename from src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/demos/bug1158628.tcl rename to src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/demos/bug1158628.tcl index e32a2ed7..be3c2c5f 100644 --- a/src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/demos/bug1158628.tcl +++ b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/demos/bug1158628.tcl @@ -1,56 +1,56 @@ -#!/usr/bin/env tclsh -# bug1158628.tcl - Copyright (C) 2005 Pat Thoyts -# -# "On windows XP, I have a GUI that has an exit buttons which when -# pressed does: {set done 1; destroy .;exit} If there is an open UDP -# channel with a fileevent on it, the program will not exit -- -# i.e. task manager still shows it. Also if I have the console up, the -# console goes away when the exit button is invoked, but the program -# does not exit. NOTE -- all windows are correctly destroyed (or at -# least withdrawn)" -# -# The fault is calling Tcl_UnregisterChannel in the udpClose function. -# We must let tcl handle this itself. Solved by Reinhard Max. -# -# This script demonstrates the problem. Using udp 1.0.6 the program hangs -# after printing "Exiting...". With the fix applied it properly exits. -# -# $Id: bug1158628.tcl,v 1.2 2005/05/19 20:46:23 patthoyts Exp $ - -#load [file join [file dirname [info script]] .. win Release udp107.dll] -#load [file join [file dirname [info script]] .. i386-unknown-openbsd3.6 libudp107.so] -package require udp - -variable forever 0 - -proc Event {sock} { - variable forever - set pkt [read $sock] - set peer [fconfigure $sock -peer] - puts "Recieved [string length $pkt] from $peer\n$pkt" - #set forever 1 - return -} - -proc Listen {port} { - set s [udp_open $port] - fconfigure $s -blocking 0 -buffering none -translation binary - fileevent $s readable [list Event $s] - return $s -} - -proc Exit {sock} { - puts "Exiting" - exit 0 -} - -if {!$tcl_interactive} { - puts "Bug #1158628 - hangs in exit if open udp channels" - puts " Using a buggy version, this will hang after printing Exiting..." - puts "" - set sock [Listen 10245] - puts "Wait 1 sec..." - after 1000 [list Exit $sock] - vwait forever - close $sock -} +#!/usr/bin/env tclsh +# bug1158628.tcl - Copyright (C) 2005 Pat Thoyts +# +# "On windows XP, I have a GUI that has an exit buttons which when +# pressed does: {set done 1; destroy .;exit} If there is an open UDP +# channel with a fileevent on it, the program will not exit -- +# i.e. task manager still shows it. Also if I have the console up, the +# console goes away when the exit button is invoked, but the program +# does not exit. NOTE -- all windows are correctly destroyed (or at +# least withdrawn)" +# +# The fault is calling Tcl_UnregisterChannel in the udpClose function. +# We must let tcl handle this itself. Solved by Reinhard Max. +# +# This script demonstrates the problem. Using udp 1.0.6 the program hangs +# after printing "Exiting...". With the fix applied it properly exits. +# +# $Id: bug1158628.tcl,v 1.2 2005/05/19 20:46:23 patthoyts Exp $ + +#load [file join [file dirname [info script]] .. win Release udp107.dll] +#load [file join [file dirname [info script]] .. i386-unknown-openbsd3.6 libudp107.so] +package require udp + +variable forever 0 + +proc Event {sock} { + variable forever + set pkt [read $sock] + set peer [fconfigure $sock -peer] + puts "Recieved [string length $pkt] from $peer\n$pkt" + #set forever 1 + return +} + +proc Listen {port} { + set s [udp_open $port] + fconfigure $s -blocking 0 -buffering none -translation binary + fileevent $s readable [list Event $s] + return $s +} + +proc Exit {sock} { + puts "Exiting" + exit 0 +} + +if {!$tcl_interactive} { + puts "Bug #1158628 - hangs in exit if open udp channels" + puts " Using a buggy version, this will hang after printing Exiting..." + puts "" + set sock [Listen 10245] + puts "Wait 1 sec..." + after 1000 [list Exit $sock] + vwait forever + close $sock +} diff --git a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/demos/chat.tcl b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/demos/chat.tcl similarity index 96% rename from src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/demos/chat.tcl rename to src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/demos/chat.tcl index bf3143b9..3cd65509 100644 --- a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/demos/chat.tcl +++ b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/demos/chat.tcl @@ -1,81 +1,81 @@ -#!/usr/bin/env tclsh -# chat.tcl - Copyright (C) 2004 Pat Thoyts -# -# This is a sample application from TclUDP. -# -# This illustrates the use of multicast UDP messages to implement a -# primitive chat application. -# -# $Id: chat.tcl,v 1.2 2007/04/10 23:36:14 patthoyts Exp $ - -package require Tk 8.4- -package require udp 1.0.6 - -variable Address 224.5.1.21 -variable Port 7771 - -proc Receive {sock} { - set pkt [read $sock] - set peer [fconfigure $sock -peer] - AddMessage $peer $pkt - return -} - -proc Start {addr port} { - set s [udp_open $port] - fconfigure $s -blocking 0 -buffering none -translation binary \ - -mcastadd $addr -remote [list $addr $port] - fileevent $s readable [list ::Receive $s] - return $s -} - -proc CreateGui {socket} { - text .t -yscrollcommand {.s set} - scrollbar .s -command {.t yview} - frame .f -border 0 - entry .f.e -textvariable ::_msg - button .f.ok -text Send -underline 0 \ - -command "SendMessage $socket \$::_msg" - button .f.ex -text Exit -underline 1 -command {destroy .} - pack .f.ex .f.ok -side right - pack .f.e -side left -expand 1 -fill x - grid .t .s -sticky news - grid .f - -sticky ew - grid columnconfigure . 0 -weight 1 - grid rowconfigure . 0 -weight 1 - bind .f.e {.f.ok invoke} - .t tag configure CLNT -foreground red - .t configure -tabs {90} -} - -proc SendMessage {sock msg} { - puts -nonewline $sock $msg -} - -proc AddMessage {client msg} { - set msg [string map [list "\r\n" "" "\r" "" "\n" ""] $msg] - set client [lindex $client 0] - if {[string length $msg] > 0} { - .t insert end "$client\t" CLNT "$msg\n" MSG - .t see end - } -} - -proc Main {} { - variable Address - variable Port - variable sock - set sock [Start $Address $Port] - CreateGui $sock - after idle [list SendMessage $sock \ - "$::tcl_platform(user)@[info hostname] connected"] - tkwait window . - close $sock -} - -if {!$tcl_interactive} { - set r [catch [linsert $argv 0 Main] err] - if {$r} {puts $::errorInfo} else {puts $err} - exit 0 -} - +#!/usr/bin/env tclsh +# chat.tcl - Copyright (C) 2004 Pat Thoyts +# +# This is a sample application from TclUDP. +# +# This illustrates the use of multicast UDP messages to implement a +# primitive chat application. +# +# $Id: chat.tcl,v 1.2 2007/04/10 23:36:14 patthoyts Exp $ + +package require Tk 8.4- +package require udp 1.0.6 + +variable Address 224.5.1.21 +variable Port 7771 + +proc Receive {sock} { + set pkt [read $sock] + set peer [fconfigure $sock -peer] + AddMessage $peer $pkt + return +} + +proc Start {addr port} { + set s [udp_open $port] + fconfigure $s -blocking 0 -buffering none -translation binary \ + -mcastadd $addr -remote [list $addr $port] + fileevent $s readable [list ::Receive $s] + return $s +} + +proc CreateGui {socket} { + text .t -yscrollcommand {.s set} + scrollbar .s -command {.t yview} + frame .f -border 0 + entry .f.e -textvariable ::_msg + button .f.ok -text Send -underline 0 \ + -command "SendMessage $socket \$::_msg" + button .f.ex -text Exit -underline 1 -command {destroy .} + pack .f.ex .f.ok -side right + pack .f.e -side left -expand 1 -fill x + grid .t .s -sticky news + grid .f - -sticky ew + grid columnconfigure . 0 -weight 1 + grid rowconfigure . 0 -weight 1 + bind .f.e {.f.ok invoke} + .t tag configure CLNT -foreground red + .t configure -tabs {90} +} + +proc SendMessage {sock msg} { + puts -nonewline $sock $msg +} + +proc AddMessage {client msg} { + set msg [string map [list "\r\n" "" "\r" "" "\n" ""] $msg] + set client [lindex $client 0] + if {[string length $msg] > 0} { + .t insert end "$client\t" CLNT "$msg\n" MSG + .t see end + } +} + +proc Main {} { + variable Address + variable Port + variable sock + set sock [Start $Address $Port] + CreateGui $sock + after idle [list SendMessage $sock \ + "$::tcl_platform(user)@[info hostname] connected"] + tkwait window . + close $sock +} + +if {!$tcl_interactive} { + set r [catch [linsert $argv 0 Main] err] + if {$r} {puts $::errorInfo} else {puts $err} + exit 0 +} + diff --git a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/demos/multicast.tcl b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/demos/multicast.tcl similarity index 96% rename from src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/demos/multicast.tcl rename to src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/demos/multicast.tcl index 64939828..b0de2ebc 100644 --- a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/demos/multicast.tcl +++ b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/demos/multicast.tcl @@ -1,45 +1,45 @@ -#!/usr/bin/env tclsh -# multicast.tcl - Copyright (C) 2004 Pat Thoyts -# -# Demonstrate the use of IPv4 multicast UDP sockets. -# -# You can send to ths using netcat: -# echo HELLO | nc -u 224.5.1.21 7771 -# -# $Id: multicast.tcl,v 1.3 2007/04/10 23:49:38 patthoyts Exp $ - -package require udp 1.0.6 - -proc udpEvent {chan} { - set data [read $chan] - set peer [fconfigure $chan -peer] - set group [lindex [fconfigure $chan -remote] 0] - puts "$peer ($group) [string length $data] '$data' {[fconfigure $chan]}" - if {[string match "QUIT*" $data]} { - close $chan - set ::forever 1 - } - return -} - -# Select a multicast group and the port number. -# -# We have two groups here to show that it's possible. -# -set group1 224.5.1.21 -set group2 224.5.2.21 -set port 7771 - -# Create a listening socket and configure for sending too. -set s [udp_open $port] -fconfigure $s -buffering none -blocking 0 -fconfigure $s -mcastadd $group2 -remote [list $group2 $port] -fconfigure $s -mcastadd $group1 -remote [list $group1 $port] -fileevent $s readable [list udpEvent $s] - -# Announce our presence and run -puts -nonewline $s "hello, world" -set forever 0 -vwait ::forever - -exit +#!/usr/bin/env tclsh +# multicast.tcl - Copyright (C) 2004 Pat Thoyts +# +# Demonstrate the use of IPv4 multicast UDP sockets. +# +# You can send to ths using netcat: +# echo HELLO | nc -u 224.5.1.21 7771 +# +# $Id: multicast.tcl,v 1.3 2007/04/10 23:49:38 patthoyts Exp $ + +package require udp 1.0.6 + +proc udpEvent {chan} { + set data [read $chan] + set peer [fconfigure $chan -peer] + set group [lindex [fconfigure $chan -remote] 0] + puts "$peer ($group) [string length $data] '$data' {[fconfigure $chan]}" + if {[string match "QUIT*" $data]} { + close $chan + set ::forever 1 + } + return +} + +# Select a multicast group and the port number. +# +# We have two groups here to show that it's possible. +# +set group1 224.5.1.21 +set group2 224.5.2.21 +set port 7771 + +# Create a listening socket and configure for sending too. +set s [udp_open $port] +fconfigure $s -buffering none -blocking 0 +fconfigure $s -mcastadd $group2 -remote [list $group2 $port] +fconfigure $s -mcastadd $group1 -remote [list $group1 $port] +fileevent $s readable [list udpEvent $s] + +# Announce our presence and run +puts -nonewline $s "hello, world" +set forever 0 +vwait ::forever + +exit diff --git a/src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/demos/udpcat.tcl b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/demos/udpcat.tcl similarity index 96% rename from src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/demos/udpcat.tcl rename to src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/demos/udpcat.tcl index 3b1bf255..284aec67 100644 --- a/src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/demos/udpcat.tcl +++ b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/demos/udpcat.tcl @@ -1,65 +1,65 @@ -#!/usr/bin/env tclsh -# udpsend.tcl - Copyright (C) 2004 Pat Thoyts -# -# Demo application - cat data from stdin via a UDP socket. -# -# $Id: udpcat.tcl,v 1.1 2004/11/22 23:48:47 patthoyts Exp $ - -package require udp 1.0.6 - -proc Event {sock} { - global forever - set pkt [read $sock] - set peer [fconfigure $sock -peer] - puts "Received [string length $pkt] from $peer\n$pkt" - set forever 1 - return -} - -proc Send {host port {msg {}}} { - set s [udp_open] - fconfigure $s -blocking 0 -buffering none -translation binary \ - -remote [list $host $port] - fileevent $s readable [list Event $s] - if {$msg eq {}} { - fcopy stdin $s - } else { - puts -nonewline $s $msg - } - - after 2000 - close $s -} - -proc Listen {port} { - set s [udp_open $port] - fconfigure $s -blocking 0 -buffering none -translation binary - fileevent $s readable [list Event $s] - return $s -} - -# ------------------------------------------------------------------------- -# Runtime -# udpsend listen -port N -blocking 0 -# udpsend send host port message -# ------------------------------------------------------------------------- -set forever 0 - -if {! $tcl_interactive} { - switch -exact -- [set cmd [lindex $argv 0]] { - send { - eval [list Send] [lrange $argv 1 end] - } - listen { - set s [Listen [lindex $argv 1]] - vwait ::forever - close $s - } - default { - puts "usage: udpcat send host port ?message?\ - \n udpcat listen port" - } - } -} - - +#!/usr/bin/env tclsh +# udpsend.tcl - Copyright (C) 2004 Pat Thoyts +# +# Demo application - cat data from stdin via a UDP socket. +# +# $Id: udpcat.tcl,v 1.1 2004/11/22 23:48:47 patthoyts Exp $ + +package require udp 1.0.6 + +proc Event {sock} { + global forever + set pkt [read $sock] + set peer [fconfigure $sock -peer] + puts "Received [string length $pkt] from $peer\n$pkt" + set forever 1 + return +} + +proc Send {host port {msg {}}} { + set s [udp_open] + fconfigure $s -blocking 0 -buffering none -translation binary \ + -remote [list $host $port] + fileevent $s readable [list Event $s] + if {$msg eq {}} { + fcopy stdin $s + } else { + puts -nonewline $s $msg + } + + after 2000 + close $s +} + +proc Listen {port} { + set s [udp_open $port] + fconfigure $s -blocking 0 -buffering none -translation binary + fileevent $s readable [list Event $s] + return $s +} + +# ------------------------------------------------------------------------- +# Runtime +# udpsend listen -port N -blocking 0 +# udpsend send host port message +# ------------------------------------------------------------------------- +set forever 0 + +if {! $tcl_interactive} { + switch -exact -- [set cmd [lindex $argv 0]] { + send { + eval [list Send] [lrange $argv 1 end] + } + listen { + set s [Listen [lindex $argv 1]] + vwait ::forever + close $s + } + default { + puts "usage: udpcat send host port ?message?\ + \n udpcat listen port" + } + } +} + + diff --git a/src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/pkgIndex.tcl b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/pkgIndex.tcl similarity index 66% rename from src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/pkgIndex.tcl rename to src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/pkgIndex.tcl index 42f0856e..ba2ae7e1 100644 --- a/src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/pkgIndex.tcl +++ b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/pkgIndex.tcl @@ -2,9 +2,9 @@ # Tcl package index file, version 1.1 # if {[package vsatisfies [package provide Tcl] 9.0-]} { - package ifneeded udp 1.0.12 [list apply {{dir} { + package ifneeded udp 1.0.13 [list apply {{dir} { # Load library - load [file join $dir tcl9udp1012.dll] [string totitle udp] + load [file join $dir tcl9udp1013.dll] [string totitle udp] # Source init file set initScript [file join $dir udp.tcl] @@ -14,11 +14,11 @@ if {[package vsatisfies [package provide Tcl] 9.0-]} { }} $dir] } else { if {![package vsatisfies [package provide Tcl] 8.5]} {return} - package ifneeded udp 1.0.12 [list apply {{dir} { + package ifneeded udp 1.0.13 [list apply {{dir} { # Load library - if {[string tolower [file extension udp1012t.dll]] in [list .dll .dylib .so]} { + if {[string tolower [file extension udp1013t.dll]] in [list .dll .dylib .so]} { # Load dynamic library - load [file join $dir udp1012t.dll] [string totitle udp] + load [file join $dir udp1013t.dll] [string totitle udp] } else { # Static library load {} [string totitle udp] diff --git a/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/tcl9udp1013.dll b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/tcl9udp1013.dll new file mode 100644 index 0000000000000000000000000000000000000000..097011cce2102d47ba66030e7e15eaefb50caf28 GIT binary patch literal 31744 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 I|Kk$)zf3|Y4FCWD literal 0 HcmV?d00001 diff --git a/src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/udp.html b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/udp.html similarity index 96% rename from src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/udp.html rename to src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/udp.html index 60b0ebf3..0366618f 100644 --- a/src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/udp.html +++ b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/udp.html @@ -100,7 +100,7 @@
-

udp(n) 1.0.12 udp "Tcl UDP extension"

+

udp(n) 1.0.13 udp "Tcl UDP extension"

Name

udp - Create UDP sockets in Tcl

@@ -120,8 +120,8 @@

Synopsis

    -
  • package require Tcl 8.5
  • -
  • package require udp 1.0.12
  • +
  • package require Tcl 8.5-
  • +
  • package require udp 1.0.13
  • udp_open ?localport? ?reuse? ?ipv6?
  • @@ -315,7 +315,7 @@ Extension Architecture by Pat Thoyts.

    Support for IPv6 and allowing a multicast join on a specific network interface is added by Huub Eikens.

See Also

-

socket(n)

+

socket

Keywords

I/O, IP Address, TclUDP, UDP, asynchronous I/O, bind, channel, connection, domain, host, name, network, network address, networking, socket, udp

diff --git a/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/udp1013t.dll b/src/vendorlib_tcl9/win32-x86_64/tcludp1.0.13/udp1013t.dll new file mode 100644 index 0000000000000000000000000000000000000000..11a3784f4e8242ea9e4ee4a04a65a61741103c84 GIT binary patch literal 30720 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

Dmou71lk^frk)S0Qdll}n+WpM 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 -# -# Demonstrate the use of broadcast UDP sockets. -# -# You can send to ths using netcat: -# echo HELLO | nc -u 192.168.255.255 7772 -# -# $Id: broadcast.tcl,v 1.1 2004/11/22 23:48:47 patthoyts Exp $ - -package require udp 1.0.6 - -proc udpEvent {chan} { - set data [read $chan] - set peer [fconfigure $chan -peer] - puts "$peer [string length $data] '$data'" - if {[string match "QUIT*" $data]} { - close $chan - set ::forever 1 - } - return -} - -# Select a subnet and the port number. -set subnet 192.168.255.255 -set port 7772 - -# Create a listening socket and configure for sending too. -set s [udp_open $port] -fconfigure $s -buffering none -blocking 0 -fconfigure $s -broadcast 1 -remote [list $subnet $port] -fileevent $s readable [list udpEvent $s] - -# Announce our presence and run -puts -nonewline $s "hello, world" -set forever 0 -vwait ::forever - -exit +#!/usr/bin/env tclsh +# multicast.tcl - Copyright (C) 2004 Pat Thoyts +# +# Demonstrate the use of broadcast UDP sockets. +# +# You can send to ths using netcat: +# echo HELLO | nc -u 192.168.255.255 7772 +# +# $Id: broadcast.tcl,v 1.1 2004/11/22 23:48:47 patthoyts Exp $ + +package require udp 1.0.6 + +proc udpEvent {chan} { + set data [read $chan] + set peer [fconfigure $chan -peer] + puts "$peer [string length $data] '$data'" + if {[string match "QUIT*" $data]} { + close $chan + set ::forever 1 + } + return +} + +# Select a subnet and the port number. +set subnet 192.168.255.255 +set port 7772 + +# Create a listening socket and configure for sending too. +set s [udp_open $port] +fconfigure $s -buffering none -blocking 0 +fconfigure $s -broadcast 1 -remote [list $subnet $port] +fileevent $s readable [list udpEvent $s] + +# Announce our presence and run +puts -nonewline $s "hello, world" +set forever 0 +vwait ::forever + +exit diff --git a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/demos/bug1158628.tcl b/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/demos/bug1158628.tcl similarity index 96% rename from src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/demos/bug1158628.tcl rename to src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/demos/bug1158628.tcl index e32a2ed7..be3c2c5f 100644 --- a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/demos/bug1158628.tcl +++ b/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/demos/bug1158628.tcl @@ -1,56 +1,56 @@ -#!/usr/bin/env tclsh -# bug1158628.tcl - Copyright (C) 2005 Pat Thoyts -# -# "On windows XP, I have a GUI that has an exit buttons which when -# pressed does: {set done 1; destroy .;exit} If there is an open UDP -# channel with a fileevent on it, the program will not exit -- -# i.e. task manager still shows it. Also if I have the console up, the -# console goes away when the exit button is invoked, but the program -# does not exit. NOTE -- all windows are correctly destroyed (or at -# least withdrawn)" -# -# The fault is calling Tcl_UnregisterChannel in the udpClose function. -# We must let tcl handle this itself. Solved by Reinhard Max. -# -# This script demonstrates the problem. Using udp 1.0.6 the program hangs -# after printing "Exiting...". With the fix applied it properly exits. -# -# $Id: bug1158628.tcl,v 1.2 2005/05/19 20:46:23 patthoyts Exp $ - -#load [file join [file dirname [info script]] .. win Release udp107.dll] -#load [file join [file dirname [info script]] .. i386-unknown-openbsd3.6 libudp107.so] -package require udp - -variable forever 0 - -proc Event {sock} { - variable forever - set pkt [read $sock] - set peer [fconfigure $sock -peer] - puts "Recieved [string length $pkt] from $peer\n$pkt" - #set forever 1 - return -} - -proc Listen {port} { - set s [udp_open $port] - fconfigure $s -blocking 0 -buffering none -translation binary - fileevent $s readable [list Event $s] - return $s -} - -proc Exit {sock} { - puts "Exiting" - exit 0 -} - -if {!$tcl_interactive} { - puts "Bug #1158628 - hangs in exit if open udp channels" - puts " Using a buggy version, this will hang after printing Exiting..." - puts "" - set sock [Listen 10245] - puts "Wait 1 sec..." - after 1000 [list Exit $sock] - vwait forever - close $sock -} +#!/usr/bin/env tclsh +# bug1158628.tcl - Copyright (C) 2005 Pat Thoyts +# +# "On windows XP, I have a GUI that has an exit buttons which when +# pressed does: {set done 1; destroy .;exit} If there is an open UDP +# channel with a fileevent on it, the program will not exit -- +# i.e. task manager still shows it. Also if I have the console up, the +# console goes away when the exit button is invoked, but the program +# does not exit. NOTE -- all windows are correctly destroyed (or at +# least withdrawn)" +# +# The fault is calling Tcl_UnregisterChannel in the udpClose function. +# We must let tcl handle this itself. Solved by Reinhard Max. +# +# This script demonstrates the problem. Using udp 1.0.6 the program hangs +# after printing "Exiting...". With the fix applied it properly exits. +# +# $Id: bug1158628.tcl,v 1.2 2005/05/19 20:46:23 patthoyts Exp $ + +#load [file join [file dirname [info script]] .. win Release udp107.dll] +#load [file join [file dirname [info script]] .. i386-unknown-openbsd3.6 libudp107.so] +package require udp + +variable forever 0 + +proc Event {sock} { + variable forever + set pkt [read $sock] + set peer [fconfigure $sock -peer] + puts "Recieved [string length $pkt] from $peer\n$pkt" + #set forever 1 + return +} + +proc Listen {port} { + set s [udp_open $port] + fconfigure $s -blocking 0 -buffering none -translation binary + fileevent $s readable [list Event $s] + return $s +} + +proc Exit {sock} { + puts "Exiting" + exit 0 +} + +if {!$tcl_interactive} { + puts "Bug #1158628 - hangs in exit if open udp channels" + puts " Using a buggy version, this will hang after printing Exiting..." + puts "" + set sock [Listen 10245] + puts "Wait 1 sec..." + after 1000 [list Exit $sock] + vwait forever + close $sock +} diff --git a/src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/demos/chat.tcl b/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/demos/chat.tcl similarity index 96% rename from src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/demos/chat.tcl rename to src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/demos/chat.tcl index bf3143b9..3cd65509 100644 --- a/src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/demos/chat.tcl +++ b/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/demos/chat.tcl @@ -1,81 +1,81 @@ -#!/usr/bin/env tclsh -# chat.tcl - Copyright (C) 2004 Pat Thoyts -# -# This is a sample application from TclUDP. -# -# This illustrates the use of multicast UDP messages to implement a -# primitive chat application. -# -# $Id: chat.tcl,v 1.2 2007/04/10 23:36:14 patthoyts Exp $ - -package require Tk 8.4- -package require udp 1.0.6 - -variable Address 224.5.1.21 -variable Port 7771 - -proc Receive {sock} { - set pkt [read $sock] - set peer [fconfigure $sock -peer] - AddMessage $peer $pkt - return -} - -proc Start {addr port} { - set s [udp_open $port] - fconfigure $s -blocking 0 -buffering none -translation binary \ - -mcastadd $addr -remote [list $addr $port] - fileevent $s readable [list ::Receive $s] - return $s -} - -proc CreateGui {socket} { - text .t -yscrollcommand {.s set} - scrollbar .s -command {.t yview} - frame .f -border 0 - entry .f.e -textvariable ::_msg - button .f.ok -text Send -underline 0 \ - -command "SendMessage $socket \$::_msg" - button .f.ex -text Exit -underline 1 -command {destroy .} - pack .f.ex .f.ok -side right - pack .f.e -side left -expand 1 -fill x - grid .t .s -sticky news - grid .f - -sticky ew - grid columnconfigure . 0 -weight 1 - grid rowconfigure . 0 -weight 1 - bind .f.e {.f.ok invoke} - .t tag configure CLNT -foreground red - .t configure -tabs {90} -} - -proc SendMessage {sock msg} { - puts -nonewline $sock $msg -} - -proc AddMessage {client msg} { - set msg [string map [list "\r\n" "" "\r" "" "\n" ""] $msg] - set client [lindex $client 0] - if {[string length $msg] > 0} { - .t insert end "$client\t" CLNT "$msg\n" MSG - .t see end - } -} - -proc Main {} { - variable Address - variable Port - variable sock - set sock [Start $Address $Port] - CreateGui $sock - after idle [list SendMessage $sock \ - "$::tcl_platform(user)@[info hostname] connected"] - tkwait window . - close $sock -} - -if {!$tcl_interactive} { - set r [catch [linsert $argv 0 Main] err] - if {$r} {puts $::errorInfo} else {puts $err} - exit 0 -} - +#!/usr/bin/env tclsh +# chat.tcl - Copyright (C) 2004 Pat Thoyts +# +# This is a sample application from TclUDP. +# +# This illustrates the use of multicast UDP messages to implement a +# primitive chat application. +# +# $Id: chat.tcl,v 1.2 2007/04/10 23:36:14 patthoyts Exp $ + +package require Tk 8.4- +package require udp 1.0.6 + +variable Address 224.5.1.21 +variable Port 7771 + +proc Receive {sock} { + set pkt [read $sock] + set peer [fconfigure $sock -peer] + AddMessage $peer $pkt + return +} + +proc Start {addr port} { + set s [udp_open $port] + fconfigure $s -blocking 0 -buffering none -translation binary \ + -mcastadd $addr -remote [list $addr $port] + fileevent $s readable [list ::Receive $s] + return $s +} + +proc CreateGui {socket} { + text .t -yscrollcommand {.s set} + scrollbar .s -command {.t yview} + frame .f -border 0 + entry .f.e -textvariable ::_msg + button .f.ok -text Send -underline 0 \ + -command "SendMessage $socket \$::_msg" + button .f.ex -text Exit -underline 1 -command {destroy .} + pack .f.ex .f.ok -side right + pack .f.e -side left -expand 1 -fill x + grid .t .s -sticky news + grid .f - -sticky ew + grid columnconfigure . 0 -weight 1 + grid rowconfigure . 0 -weight 1 + bind .f.e {.f.ok invoke} + .t tag configure CLNT -foreground red + .t configure -tabs {90} +} + +proc SendMessage {sock msg} { + puts -nonewline $sock $msg +} + +proc AddMessage {client msg} { + set msg [string map [list "\r\n" "" "\r" "" "\n" ""] $msg] + set client [lindex $client 0] + if {[string length $msg] > 0} { + .t insert end "$client\t" CLNT "$msg\n" MSG + .t see end + } +} + +proc Main {} { + variable Address + variable Port + variable sock + set sock [Start $Address $Port] + CreateGui $sock + after idle [list SendMessage $sock \ + "$::tcl_platform(user)@[info hostname] connected"] + tkwait window . + close $sock +} + +if {!$tcl_interactive} { + set r [catch [linsert $argv 0 Main] err] + if {$r} {puts $::errorInfo} else {puts $err} + exit 0 +} + diff --git a/src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/demos/multicast.tcl b/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/demos/multicast.tcl similarity index 96% rename from src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/demos/multicast.tcl rename to src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/demos/multicast.tcl index 64939828..b0de2ebc 100644 --- a/src/vfs/punk9win.vfs/lib_tcl9/udp1.0.12/demos/multicast.tcl +++ b/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/demos/multicast.tcl @@ -1,45 +1,45 @@ -#!/usr/bin/env tclsh -# multicast.tcl - Copyright (C) 2004 Pat Thoyts -# -# Demonstrate the use of IPv4 multicast UDP sockets. -# -# You can send to ths using netcat: -# echo HELLO | nc -u 224.5.1.21 7771 -# -# $Id: multicast.tcl,v 1.3 2007/04/10 23:49:38 patthoyts Exp $ - -package require udp 1.0.6 - -proc udpEvent {chan} { - set data [read $chan] - set peer [fconfigure $chan -peer] - set group [lindex [fconfigure $chan -remote] 0] - puts "$peer ($group) [string length $data] '$data' {[fconfigure $chan]}" - if {[string match "QUIT*" $data]} { - close $chan - set ::forever 1 - } - return -} - -# Select a multicast group and the port number. -# -# We have two groups here to show that it's possible. -# -set group1 224.5.1.21 -set group2 224.5.2.21 -set port 7771 - -# Create a listening socket and configure for sending too. -set s [udp_open $port] -fconfigure $s -buffering none -blocking 0 -fconfigure $s -mcastadd $group2 -remote [list $group2 $port] -fconfigure $s -mcastadd $group1 -remote [list $group1 $port] -fileevent $s readable [list udpEvent $s] - -# Announce our presence and run -puts -nonewline $s "hello, world" -set forever 0 -vwait ::forever - -exit +#!/usr/bin/env tclsh +# multicast.tcl - Copyright (C) 2004 Pat Thoyts +# +# Demonstrate the use of IPv4 multicast UDP sockets. +# +# You can send to ths using netcat: +# echo HELLO | nc -u 224.5.1.21 7771 +# +# $Id: multicast.tcl,v 1.3 2007/04/10 23:49:38 patthoyts Exp $ + +package require udp 1.0.6 + +proc udpEvent {chan} { + set data [read $chan] + set peer [fconfigure $chan -peer] + set group [lindex [fconfigure $chan -remote] 0] + puts "$peer ($group) [string length $data] '$data' {[fconfigure $chan]}" + if {[string match "QUIT*" $data]} { + close $chan + set ::forever 1 + } + return +} + +# Select a multicast group and the port number. +# +# We have two groups here to show that it's possible. +# +set group1 224.5.1.21 +set group2 224.5.2.21 +set port 7771 + +# Create a listening socket and configure for sending too. +set s [udp_open $port] +fconfigure $s -buffering none -blocking 0 +fconfigure $s -mcastadd $group2 -remote [list $group2 $port] +fconfigure $s -mcastadd $group1 -remote [list $group1 $port] +fileevent $s readable [list udpEvent $s] + +# Announce our presence and run +puts -nonewline $s "hello, world" +set forever 0 +vwait ::forever + +exit diff --git a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/demos/udpcat.tcl b/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/demos/udpcat.tcl similarity index 96% rename from src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/demos/udpcat.tcl rename to src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/demos/udpcat.tcl index 3b1bf255..284aec67 100644 --- a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/demos/udpcat.tcl +++ b/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/demos/udpcat.tcl @@ -1,65 +1,65 @@ -#!/usr/bin/env tclsh -# udpsend.tcl - Copyright (C) 2004 Pat Thoyts -# -# Demo application - cat data from stdin via a UDP socket. -# -# $Id: udpcat.tcl,v 1.1 2004/11/22 23:48:47 patthoyts Exp $ - -package require udp 1.0.6 - -proc Event {sock} { - global forever - set pkt [read $sock] - set peer [fconfigure $sock -peer] - puts "Received [string length $pkt] from $peer\n$pkt" - set forever 1 - return -} - -proc Send {host port {msg {}}} { - set s [udp_open] - fconfigure $s -blocking 0 -buffering none -translation binary \ - -remote [list $host $port] - fileevent $s readable [list Event $s] - if {$msg eq {}} { - fcopy stdin $s - } else { - puts -nonewline $s $msg - } - - after 2000 - close $s -} - -proc Listen {port} { - set s [udp_open $port] - fconfigure $s -blocking 0 -buffering none -translation binary - fileevent $s readable [list Event $s] - return $s -} - -# ------------------------------------------------------------------------- -# Runtime -# udpsend listen -port N -blocking 0 -# udpsend send host port message -# ------------------------------------------------------------------------- -set forever 0 - -if {! $tcl_interactive} { - switch -exact -- [set cmd [lindex $argv 0]] { - send { - eval [list Send] [lrange $argv 1 end] - } - listen { - set s [Listen [lindex $argv 1]] - vwait ::forever - close $s - } - default { - puts "usage: udpcat send host port ?message?\ - \n udpcat listen port" - } - } -} - - +#!/usr/bin/env tclsh +# udpsend.tcl - Copyright (C) 2004 Pat Thoyts +# +# Demo application - cat data from stdin via a UDP socket. +# +# $Id: udpcat.tcl,v 1.1 2004/11/22 23:48:47 patthoyts Exp $ + +package require udp 1.0.6 + +proc Event {sock} { + global forever + set pkt [read $sock] + set peer [fconfigure $sock -peer] + puts "Received [string length $pkt] from $peer\n$pkt" + set forever 1 + return +} + +proc Send {host port {msg {}}} { + set s [udp_open] + fconfigure $s -blocking 0 -buffering none -translation binary \ + -remote [list $host $port] + fileevent $s readable [list Event $s] + if {$msg eq {}} { + fcopy stdin $s + } else { + puts -nonewline $s $msg + } + + after 2000 + close $s +} + +proc Listen {port} { + set s [udp_open $port] + fconfigure $s -blocking 0 -buffering none -translation binary + fileevent $s readable [list Event $s] + return $s +} + +# ------------------------------------------------------------------------- +# Runtime +# udpsend listen -port N -blocking 0 +# udpsend send host port message +# ------------------------------------------------------------------------- +set forever 0 + +if {! $tcl_interactive} { + switch -exact -- [set cmd [lindex $argv 0]] { + send { + eval [list Send] [lrange $argv 1 end] + } + listen { + set s [Listen [lindex $argv 1]] + vwait ::forever + close $s + } + default { + puts "usage: udpcat send host port ?message?\ + \n udpcat listen port" + } + } +} + + diff --git a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/pkgIndex.tcl b/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/pkgIndex.tcl similarity index 66% rename from src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/pkgIndex.tcl rename to src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/pkgIndex.tcl index 42f0856e..ba2ae7e1 100644 --- a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/pkgIndex.tcl +++ b/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/pkgIndex.tcl @@ -2,9 +2,9 @@ # Tcl package index file, version 1.1 # if {[package vsatisfies [package provide Tcl] 9.0-]} { - package ifneeded udp 1.0.12 [list apply {{dir} { + package ifneeded udp 1.0.13 [list apply {{dir} { # Load library - load [file join $dir tcl9udp1012.dll] [string totitle udp] + load [file join $dir tcl9udp1013.dll] [string totitle udp] # Source init file set initScript [file join $dir udp.tcl] @@ -14,11 +14,11 @@ if {[package vsatisfies [package provide Tcl] 9.0-]} { }} $dir] } else { if {![package vsatisfies [package provide Tcl] 8.5]} {return} - package ifneeded udp 1.0.12 [list apply {{dir} { + package ifneeded udp 1.0.13 [list apply {{dir} { # Load library - if {[string tolower [file extension udp1012t.dll]] in [list .dll .dylib .so]} { + if {[string tolower [file extension udp1013t.dll]] in [list .dll .dylib .so]} { # Load dynamic library - load [file join $dir udp1012t.dll] [string totitle udp] + load [file join $dir udp1013t.dll] [string totitle udp] } else { # Static library load {} [string totitle udp] diff --git a/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/tcl9udp1013.dll b/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/tcl9udp1013.dll new file mode 100644 index 0000000000000000000000000000000000000000..097011cce2102d47ba66030e7e15eaefb50caf28 GIT binary patch literal 31744 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 I|Kk$)zf3|Y4FCWD literal 0 HcmV?d00001 diff --git a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/udp.html b/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/udp.html similarity index 96% rename from src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/udp.html rename to src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/udp.html index 60b0ebf3..0366618f 100644 --- a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/udp1.0.12/udp.html +++ b/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/udp.html @@ -100,7 +100,7 @@

-

udp(n) 1.0.12 udp "Tcl UDP extension"

+

udp(n) 1.0.13 udp "Tcl UDP extension"

Name

udp - Create UDP sockets in Tcl

@@ -120,8 +120,8 @@

Synopsis

    -
  • package require Tcl 8.5
  • -
  • package require udp 1.0.12
  • +
  • package require Tcl 8.5-
  • +
  • package require udp 1.0.13
  • udp_open ?localport? ?reuse? ?ipv6?
  • @@ -315,7 +315,7 @@ Extension Architecture by Pat Thoyts.

    Support for IPv6 and allowing a multicast join on a specific network interface is added by Huub Eikens.

See Also

-

socket(n)

+

socket

Keywords

I/O, IP Address, TclUDP, UDP, asynchronous I/O, bind, channel, connection, domain, host, name, network, network address, networking, socket, udp

diff --git a/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/udp1013t.dll b/src/vfs/punk9win.vfs/lib_tcl9/tcludp1.0.13/udp1013t.dll new file mode 100644 index 0000000000000000000000000000000000000000..11a3784f4e8242ea9e4ee4a04a65a61741103c84 GIT binary patch literal 30720 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

Dmou71lk^frk)S0Qdll}n+WpM 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 diff --git a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/broadcast.tcl b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/broadcast.tcl new file mode 100644 index 00000000..e4c1bfbc --- /dev/null +++ b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/broadcast.tcl @@ -0,0 +1,39 @@ +#!/usr/bin/env tclsh +# multicast.tcl - Copyright (C) 2004 Pat Thoyts +# +# Demonstrate the use of broadcast UDP sockets. +# +# You can send to ths using netcat: +# echo HELLO | nc -u 192.168.255.255 7772 +# +# $Id: broadcast.tcl,v 1.1 2004/11/22 23:48:47 patthoyts Exp $ + +package require udp 1.0.6 + +proc udpEvent {chan} { + set data [read $chan] + set peer [fconfigure $chan -peer] + puts "$peer [string length $data] '$data'" + if {[string match "QUIT*" $data]} { + close $chan + set ::forever 1 + } + return +} + +# Select a subnet and the port number. +set subnet 192.168.255.255 +set port 7772 + +# Create a listening socket and configure for sending too. +set s [udp_open $port] +fconfigure $s -buffering none -blocking 0 +fconfigure $s -broadcast 1 -remote [list $subnet $port] +fileevent $s readable [list udpEvent $s] + +# Announce our presence and run +puts -nonewline $s "hello, world" +set forever 0 +vwait ::forever + +exit diff --git a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/bug1158628.tcl b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/bug1158628.tcl new file mode 100644 index 00000000..be3c2c5f --- /dev/null +++ b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/bug1158628.tcl @@ -0,0 +1,56 @@ +#!/usr/bin/env tclsh +# bug1158628.tcl - Copyright (C) 2005 Pat Thoyts +# +# "On windows XP, I have a GUI that has an exit buttons which when +# pressed does: {set done 1; destroy .;exit} If there is an open UDP +# channel with a fileevent on it, the program will not exit -- +# i.e. task manager still shows it. Also if I have the console up, the +# console goes away when the exit button is invoked, but the program +# does not exit. NOTE -- all windows are correctly destroyed (or at +# least withdrawn)" +# +# The fault is calling Tcl_UnregisterChannel in the udpClose function. +# We must let tcl handle this itself. Solved by Reinhard Max. +# +# This script demonstrates the problem. Using udp 1.0.6 the program hangs +# after printing "Exiting...". With the fix applied it properly exits. +# +# $Id: bug1158628.tcl,v 1.2 2005/05/19 20:46:23 patthoyts Exp $ + +#load [file join [file dirname [info script]] .. win Release udp107.dll] +#load [file join [file dirname [info script]] .. i386-unknown-openbsd3.6 libudp107.so] +package require udp + +variable forever 0 + +proc Event {sock} { + variable forever + set pkt [read $sock] + set peer [fconfigure $sock -peer] + puts "Recieved [string length $pkt] from $peer\n$pkt" + #set forever 1 + return +} + +proc Listen {port} { + set s [udp_open $port] + fconfigure $s -blocking 0 -buffering none -translation binary + fileevent $s readable [list Event $s] + return $s +} + +proc Exit {sock} { + puts "Exiting" + exit 0 +} + +if {!$tcl_interactive} { + puts "Bug #1158628 - hangs in exit if open udp channels" + puts " Using a buggy version, this will hang after printing Exiting..." + puts "" + set sock [Listen 10245] + puts "Wait 1 sec..." + after 1000 [list Exit $sock] + vwait forever + close $sock +} diff --git a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/chat.tcl b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/chat.tcl new file mode 100644 index 00000000..3cd65509 --- /dev/null +++ b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/chat.tcl @@ -0,0 +1,81 @@ +#!/usr/bin/env tclsh +# chat.tcl - Copyright (C) 2004 Pat Thoyts +# +# This is a sample application from TclUDP. +# +# This illustrates the use of multicast UDP messages to implement a +# primitive chat application. +# +# $Id: chat.tcl,v 1.2 2007/04/10 23:36:14 patthoyts Exp $ + +package require Tk 8.4- +package require udp 1.0.6 + +variable Address 224.5.1.21 +variable Port 7771 + +proc Receive {sock} { + set pkt [read $sock] + set peer [fconfigure $sock -peer] + AddMessage $peer $pkt + return +} + +proc Start {addr port} { + set s [udp_open $port] + fconfigure $s -blocking 0 -buffering none -translation binary \ + -mcastadd $addr -remote [list $addr $port] + fileevent $s readable [list ::Receive $s] + return $s +} + +proc CreateGui {socket} { + text .t -yscrollcommand {.s set} + scrollbar .s -command {.t yview} + frame .f -border 0 + entry .f.e -textvariable ::_msg + button .f.ok -text Send -underline 0 \ + -command "SendMessage $socket \$::_msg" + button .f.ex -text Exit -underline 1 -command {destroy .} + pack .f.ex .f.ok -side right + pack .f.e -side left -expand 1 -fill x + grid .t .s -sticky news + grid .f - -sticky ew + grid columnconfigure . 0 -weight 1 + grid rowconfigure . 0 -weight 1 + bind .f.e {.f.ok invoke} + .t tag configure CLNT -foreground red + .t configure -tabs {90} +} + +proc SendMessage {sock msg} { + puts -nonewline $sock $msg +} + +proc AddMessage {client msg} { + set msg [string map [list "\r\n" "" "\r" "" "\n" ""] $msg] + set client [lindex $client 0] + if {[string length $msg] > 0} { + .t insert end "$client\t" CLNT "$msg\n" MSG + .t see end + } +} + +proc Main {} { + variable Address + variable Port + variable sock + set sock [Start $Address $Port] + CreateGui $sock + after idle [list SendMessage $sock \ + "$::tcl_platform(user)@[info hostname] connected"] + tkwait window . + close $sock +} + +if {!$tcl_interactive} { + set r [catch [linsert $argv 0 Main] err] + if {$r} {puts $::errorInfo} else {puts $err} + exit 0 +} + diff --git a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/multicast.tcl b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/multicast.tcl new file mode 100644 index 00000000..b0de2ebc --- /dev/null +++ b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/multicast.tcl @@ -0,0 +1,45 @@ +#!/usr/bin/env tclsh +# multicast.tcl - Copyright (C) 2004 Pat Thoyts +# +# Demonstrate the use of IPv4 multicast UDP sockets. +# +# You can send to ths using netcat: +# echo HELLO | nc -u 224.5.1.21 7771 +# +# $Id: multicast.tcl,v 1.3 2007/04/10 23:49:38 patthoyts Exp $ + +package require udp 1.0.6 + +proc udpEvent {chan} { + set data [read $chan] + set peer [fconfigure $chan -peer] + set group [lindex [fconfigure $chan -remote] 0] + puts "$peer ($group) [string length $data] '$data' {[fconfigure $chan]}" + if {[string match "QUIT*" $data]} { + close $chan + set ::forever 1 + } + return +} + +# Select a multicast group and the port number. +# +# We have two groups here to show that it's possible. +# +set group1 224.5.1.21 +set group2 224.5.2.21 +set port 7771 + +# Create a listening socket and configure for sending too. +set s [udp_open $port] +fconfigure $s -buffering none -blocking 0 +fconfigure $s -mcastadd $group2 -remote [list $group2 $port] +fconfigure $s -mcastadd $group1 -remote [list $group1 $port] +fileevent $s readable [list udpEvent $s] + +# Announce our presence and run +puts -nonewline $s "hello, world" +set forever 0 +vwait ::forever + +exit diff --git a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/udpcat.tcl b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/udpcat.tcl new file mode 100644 index 00000000..284aec67 --- /dev/null +++ b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/demos/udpcat.tcl @@ -0,0 +1,65 @@ +#!/usr/bin/env tclsh +# udpsend.tcl - Copyright (C) 2004 Pat Thoyts +# +# Demo application - cat data from stdin via a UDP socket. +# +# $Id: udpcat.tcl,v 1.1 2004/11/22 23:48:47 patthoyts Exp $ + +package require udp 1.0.6 + +proc Event {sock} { + global forever + set pkt [read $sock] + set peer [fconfigure $sock -peer] + puts "Received [string length $pkt] from $peer\n$pkt" + set forever 1 + return +} + +proc Send {host port {msg {}}} { + set s [udp_open] + fconfigure $s -blocking 0 -buffering none -translation binary \ + -remote [list $host $port] + fileevent $s readable [list Event $s] + if {$msg eq {}} { + fcopy stdin $s + } else { + puts -nonewline $s $msg + } + + after 2000 + close $s +} + +proc Listen {port} { + set s [udp_open $port] + fconfigure $s -blocking 0 -buffering none -translation binary + fileevent $s readable [list Event $s] + return $s +} + +# ------------------------------------------------------------------------- +# Runtime +# udpsend listen -port N -blocking 0 +# udpsend send host port message +# ------------------------------------------------------------------------- +set forever 0 + +if {! $tcl_interactive} { + switch -exact -- [set cmd [lindex $argv 0]] { + send { + eval [list Send] [lrange $argv 1 end] + } + listen { + set s [Listen [lindex $argv 1]] + vwait ::forever + close $s + } + default { + puts "usage: udpcat send host port ?message?\ + \n udpcat listen port" + } + } +} + + diff --git a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/pkgIndex.tcl b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/pkgIndex.tcl new file mode 100644 index 00000000..ba2ae7e1 --- /dev/null +++ b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/pkgIndex.tcl @@ -0,0 +1,33 @@ +# -*- tcl -*- +# Tcl package index file, version 1.1 +# +if {[package vsatisfies [package provide Tcl] 9.0-]} { + package ifneeded udp 1.0.13 [list apply {{dir} { + # Load library + load [file join $dir tcl9udp1013.dll] [string totitle udp] + + # Source init file + set initScript [file join $dir udp.tcl] + if {[file exists $initScript]} { + source -encoding utf-8 $initScript + } + }} $dir] +} else { + if {![package vsatisfies [package provide Tcl] 8.5]} {return} + package ifneeded udp 1.0.13 [list apply {{dir} { + # Load library + if {[string tolower [file extension udp1013t.dll]] in [list .dll .dylib .so]} { + # Load dynamic library + load [file join $dir udp1013t.dll] [string totitle udp] + } else { + # Static library + load {} [string totitle udp] + } + + # Source init file + set initScript [file join $dir udp.tcl] + if {[file exists $initScript]} { + source -encoding utf-8 $initScript + } + }} $dir] +} diff --git a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/tcl9udp1013.dll b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/tcl9udp1013.dll new file mode 100644 index 0000000000000000000000000000000000000000..097011cce2102d47ba66030e7e15eaefb50caf28 GIT binary patch literal 31744 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 I|Kk$)zf3|Y4FCWD literal 0 HcmV?d00001 diff --git a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/udp.html b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/udp.html new file mode 100644 index 00000000..0366618f --- /dev/null +++ b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/udp.html @@ -0,0 +1,326 @@ + + + +udp - Tcl UDP extension + + + + + +

+

udp(n) 1.0.13 udp "Tcl UDP extension"

+

Name

+

udp - Create UDP sockets in Tcl

+
+ + +

Description

+

This package provides support for using UDP through Tcl. The package provides +a new channel type and attempts to permit the use of packet oriented UDP +over stream oriented Tcl channels. The package defined three commands but +udp_conf should be considered depreciated in favor of the standard +Tcl command fconfigure.

+
+

COMMANDS

+
+
udp_open ?localport? ?reuse? ?ipv6?
+

udp_open will open a UDP socket. If a localport is specified the UDP +socket will be opened on that port. Otherwise the system will choose a port +and the user can use the udp_conf command to obtain the port number +if required.

+

The following keywords can be used to specify options on the opened socket.

+
+
reuse
+

Using this keyword sets the SO_REUSEADDR socket option which permits multiple +sockets to be bound to the same address/port combination.

+
ipv6
+

By default a IPv4 socket is created. When keyword ipv6 is specified, an IPv6 +socket is opened.

+
+
udp_conf channel host port
+

Deprecated in favor of the standard Tcl fconfigure or +chan configure commands.

+

udp_conf in this configuration is used to specify the remote destination +for packets written to this channel. You must call this command before +writing data to the UDP socket.

+
udp_conf channel ?optionName? ?value? ?optionName value ...?
+

Deprecated in favor of the standard Tcl fconfigure or +chan configure commands.

+

In addition to being used to configure the remote host, the udp_conf +command is used to obtain information about the UDP socket. NOTE all these +options are now available using the standard Tcl fconfigure or +chan configure command.

+
+
-myport
+

Returns the local port number of the socket. Read-only option.

+
-remote ?address port?
+

Specifies or returns the remote hostname and port number. Can also be set using +udp_conf channel host port.

+
-peer
+

Returns the remote hostname and port number for the packet most recently +received by this socket. Read-only option.

+
-family
+

Returns whether socket is configured for IPv4 or IPv6. Read-only option.

+
-broadcast ?boolean?
+

Specifies or returns whether can listen and send on the broadcast address. For some systems +a flag must be set on the socket to use broadcast. This option is not permitted when +using IPv6, instead use multicast.

+
-ttl ?count?
+

The time-to-live is given as the number of router hops the packet may do. For +multicast packets this is important in specifying the distribution of the +packet. The system default for multicast is 1 which restricts the packet +to the local subnet. To permit packets to pass routers, you must increase the +ttl. A value of 31 should keep it within a site, while 255 is global.

+
-mcastadd groupaddr
+
+
-mcastadd "groupaddr netwif"
+
+
-mcastdrop groupaddr
+
+
-mcastdrop "groupaddr netwif"
+
+
-mcastgroups
+

tcludp sockets can support IPv4 and IPv6 multicast operations. To receive +multicast packets the application has to notify the operating system that +it should join a particular multicast group. For IPv4 these are specified as addresses +in the range 224.0.0.0 to 239.255.255.255.

+

When specifying only the groupaddr the system will determine the network interface to use. +Specifying the netwif will join a multicast group on a specific network interface. +This is useful on a multihomed system with multiple network interfaces. +On windows you must specify the network interface index. For other platforms the network +interface (e.g. 'eth0') name can be specified.

+

To view the current set of multicast groups for a channel use -mcastgroups

+
-mcastif
+

Returns which interface is used for outgoing multicast packets. UNIX only.

+
-mcastloop ?boolean?
+

With multicast udp the system can choose to receive packets that it has sent +or it can drop them. This is known as multicast loopback and can be controlled +using this option. By default the value is true and your application will receive +its own transmissions.

+
+
udp_peek channel ?buffersize?
+

Examine a packet without removing it from the buffer. Option buffersize specifies the +maximum buffer size. Value must be between 0 and 16.

+

This function is not available on windows.

+
::udp::build-info
+

Return information on the build environment.

+
::udp::getaddrinfo -hostname name ?optionName value ...?
+

Returns a list with info on the IP address matching the specified parameters. +Valid options are:

+
+
-hostname name
+

Specifies which IP address to use for lookup. Can use IP address or name. Required option.

+
-port number
+

Specifies which port number to use for lookup.

+
-service name
+

Specifies which well-known service (i.e. http, https, etc.) to use for port in lookup.

+
-ipv4
+

Only return IP v4 addresses.

+
-ipv6
+

Only return IP v6 addresses.

+
-server
+

Only return services for which hostname is a server.

+
-tcp
+

Only return TCP services.

+
-udp
+

Only return UDP services.

+
+
::udp::getnameinfo address ?ipv6?
+

::udp::getnameinfo will return the name(s) corresponding to IP +address address. With ipv6, address is an IPv6 address.

+
+
+

EXAMPLES

+
+# Send data to a remote UDP socket
+proc udp_puts {host port} {
+    set s [udp_open]
+    fconfigure $s -remote [list $host $port]
+    puts $s "Hello, World"
+    close $f
+}
+
+
+# A simple UDP server
+package require udp
+proc udpEventHandler {sock} {
+    set pkt [read $sock]
+    set peer [fconfigure $sock -peer]
+    puts "$peer: [string length $pkt] {$pkt}"
+    return
+}
+proc udp_listen {port} {
+    set srv [udp_open $port]
+    fconfigure $srv -buffering none -translation binary
+    fileevent $srv readable [list ::udpEventHandler $srv]
+    puts "Listening on udp port: [fconfigure $srv -myport]"
+    return $srv
+}
+set sock [udp_listen 53530]
+vwait forever
+close $sock
+
+
+# A multicast demo.
+proc udpEvent {chan} {
+    set data [read $chan]
+    set peer [fconfigure $chan -peer]
+    puts "$peer [string length $data] '$data'"
+    if {[string match "QUIT*" $data]} {
+        close $chan
+        set ::forever 1
+    }
+    return
+}
+set group 224.5.1.21
+set port  7771
+set s [udp_open $port]
+fconfigure $s -buffering none -blocking 0
+fconfigure $s -mcastadd $group -remote [list $group $port]
+fileevent $s readable [list udpEvent $s]
+puts -nonewline $s "hello, world"
+set ::forever 0
+vwait ::forever
+exit
+
+
+

HISTORY

+

Some of the code in this extension is copied from Michael Miller's tcludp +package. (http://www.neosoft.com/tcl/ftparchive/sorted/comm/tcludp-1.0/) +Compared with Michael's UDP extension, this extension provides Windows +support and provides the ability of using 'gets/puts' to read/write +the socket. In addition, it provides more configuration ability.

+

Enhancements to support binary data and to setup the package for the Tcl +Extension Architecture by Pat Thoyts.

+

Support for IPv6 and allowing a multicast join on a specific network interface is added by Huub Eikens.

+
+

See Also

+

socket

+
+

Keywords

+

I/O, IP Address, TclUDP, UDP, asynchronous I/O, bind, channel, connection, domain, host, name, network, network address, networking, socket, udp

+
+ +
diff --git a/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/udp1013t.dll b/src/vfs/punk9win_for_tkruntime.vfs/lib_tcl9/tcludp1.0.13/udp1013t.dll new file mode 100644 index 0000000000000000000000000000000000000000..11a3784f4e8242ea9e4ee4a04a65a61741103c84 GIT binary patch literal 30720 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

Dmou71lk^frk)S0Qdll}n+WpM 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