wm geo .konsola 786x622+575+18; kons_font 11; # tahr
## ustawianie TOS w gniazdku w j Tcl ?, 29.01.2021
# + obecnie to nie TOS tylko "DiffServ field" i "ECN"...
# + sockopt_lib.so zawiera: fileno, getsockopt_tos, setsockopt_tos
# + inne niz tos op *sockopt robic przez ffidl, patrz sockopt01.tcl
# + nowa wersja fileno DZIALA z socketami udp !!! 31.01.2021
# + tcl api docs; Tcl_GetChannel i Tcl_GetChannelHandle
# http://www.tcl.tk/man/tcl8.6/TclLib/OpenFileChnl.htm
# http://www.tcl.tk/man/tcl8.6/TclLib/CrtChannel.htm
# + potrzebna wersja win: sockopt_lib.dll !
# + getsockopt_tos: powinien byc msg na stderr w razie bledu !!
#
load ./sockopt_lib.so
fileno "qqq"
#% -1
fileno "stdin"
#% 0
fileno "stdout"
#% 1
fileno "stderr"
#% 2
set s [socket 150.254.78.111 20002]
#% sock980cee8
set desk [fileno $s]
#% 7
# + pobranie desk socketu...
fconfigure $s -blocking 0
puts $s "GET / HTTP/1.1"; flush $s
puts $s "Host: 150.254.78.111:20002"; flush $s
puts $s "qqq: 1234444"; flush $s
# + mozna obserwowac przez wireshark zmodyf bity tos...
setsockopt_tos $desk 0b00000000
#% 0
setsockopt_tos $desk 0b00110000
#% 0
#% 0
# ^ starsze 6bitow to "ds field", mlodsze 2bity to "ecn"
format %08b [getsockopt_tos $desk]
#% 00010000
#% 00000000
getsockopt_tos 0
#% -1
# + jest msg na stderr
setsockopt_tos 0 0
#% 88
# + to jest wartosc errno; jest tez msg na stderr
# ...
# czy fileno dziala dla socketow udp ? odp: TAK!!
#
lappend auto_path ~/tcl/111/000_lupu/udp1.0.11/
lappend auto_path ~/tcl/000/udp1.0.11/
package re udp
#% 1.0.11
set u1 [udp_open 10000]
#% sock8
set u1_desk [fileno $u1]
#% 8
setsockopt_tos $u1_desk 0b00000000
#% 0
setsockopt_tos $u1_desk 0b01110000
# ^ starsze 6bitow to "ds field", mlodsze 2bity to "ecn"
format %08b [getsockopt_tos $u1_desk]
#% 01110000
fconfigure $u1
#% -blocking 1 -buffering full -buffersize 4096 -encoding utf-8 -eofchar {{} {}} -translation {auto lf} -myport 10000 -remote {} -peer {} -mcastgroups {} -mcastloop 1 -broadcast 0 -ttl 64 -sendsize 0
fconfigure $u1 -remote {150.254.78.111 20002}
#% 150.254.78.111 20002
puts $u1 "qqq"; flush $u1
# + widac efekty przez wireshark...
# ...
exit