1 # udp.tcl --
2 #
3 # FIXME: This file needs a description here.
4 #
5 # Copyright (c) 1998-2002 The Regents of the University of California.
6 # All rights reserved.
7 #
8 # Redistribution and use in source and binary forms, with or without
9 # modification, are permitted provided that the following conditions are met:
10 #
11 # A. Redistributions of source code must retain the above copyright notice,
12 # this list of conditions and the following disclaimer.
13 # B. Redistributions in binary form must reproduce the above copyright notice,
14 # this list of conditions and the following disclaimer in the documentation
15 # and/or other materials provided with the distribution.
16 # C. Neither the names of the copyright holders nor the names of its
17 # contributors may be used to endorse or promote products derived from this
18 # software without specific prior written permission.
19 #
20 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
21 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR
24 # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26 # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31 #provide UDPChannel
32 import Network
33
34
35 # Open a new UDP channel. If <i>spec</i> is given in the
36 # form <i>address</i>/<i>port</i>, that address is used for
37 # sending and receiving all data. If <i>spec</i> is given in the
38 # form <i>port</i>, that port is opened for listening. If
39 # <i>spec</i> is not given, the channel is bound to an ephemeral port.
40 UDPChannel public init { {spec ""} {mtu 1024} } {
41 $self next $mtu
42
43 $self instvar net_
44 set net_ [new Network]
45 $net_ loopback 1
46
47 if {$spec == ""} {
48 $net_ open 0
49 } elseif [regexp {^[0-9]*$} $spec] {
50 $net_ open $spec
51 } else {
52 set spec [split $spec /]
53 set len [llength $spec]
54 if { $len<2 || $len>3 } {
55 $self fatal "invalid spec \"$spec\"."
56 }
57 set addr [lindex $spec 0]
58 set ports [split [lindex $spec 1] :]
59
60 #FIXME
61 set ttl 15
62 if {$len == 3} {
63 set ttl [lindex $spec 2]
64 }
65
66 if {[llength $ports] == 1} {
67 set port [lindex $ports 0]
68 $net_ open $addr $port $ttl
69 } else {
70 set sport [lindex $ports 0]
71 set rport [lindex $ports 1]
72 $net_ open $addr $sport $rport $ttl
73 }
74 }
75
76 $self network $net_
77 }
78
79 #
80 UDPChannel public destroy {} {
81 $self instvar net_
82 delete $net_
83
84 $self next
85 }
86
87 # Sets the multicast TTL for all outgoing packets to <i>t</i>.
88 UDPChannel public ttl {t} {
89 $self instvar net_
90 $net_ ttl $t
91 }
92
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.