Attachment "halfclosesock-3.patch" to
ticket [219159ffff]
added by
ferrieux
2008-12-01 21:22:06.
0000: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 Index: generic/t
0010: 63 6c 2e 64 65 63 6c 73 0a 3d 3d 3d 3d 3d 3d 3d cl.decls.=======
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 ============.RCS
0060: 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f file: /cvsroot/
0070: 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f tcl/tcl/generic/
0080: 74 63 6c 2e 64 65 63 6c 73 2c 76 0a 72 65 74 72 tcl.decls,v.retr
0090: 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 ieving revision
00a0: 31 2e 31 35 34 0a 64 69 66 66 20 2d 75 20 2d 72 1.154.diff -u -r
00b0: 31 2e 31 35 34 20 74 63 6c 2e 64 65 63 6c 73 0a 1.154 tcl.decls.
00c0: 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 2e --- generic/tcl.
00d0: 64 65 63 6c 73 09 31 37 20 4e 6f 76 20 32 30 30 decls.17 Nov 200
00e0: 38 20 32 32 3a 31 35 3a 33 34 20 2d 30 30 30 30 8 22:15:34 -0000
00f0: 09 31 2e 31 35 34 0a 2b 2b 2b 20 67 65 6e 65 72 .1.154.+++ gener
0100: 69 63 2f 74 63 6c 2e 64 65 63 6c 73 09 31 20 44 ic/tcl.decls.1 D
0110: 65 63 20 32 30 30 38 20 31 34 3a 31 36 3a 34 31 ec 2008 14:16:41
0120: 20 2d 30 30 30 30 0a 40 40 20 2d 32 32 30 34 2c -0000.@@ -2204,
0130: 36 20 2b 32 32 30 34 2c 31 31 20 40 40 0a 20 09 6 +2204,11 @@. .
0140: 20 20 20 20 69 6e 74 20 2a 6f 62 6a 63 50 74 72 int *objcPtr
0150: 2c 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 , Tcl_Obj *const
0160: 20 2a 6f 62 6a 76 2c 20 54 63 6c 5f 4f 62 6a 20 *objv, Tcl_Obj
0170: 2a 2a 2a 72 65 6d 4f 62 6a 76 29 0a 20 7d 0a 20 ***remObjv). }.
0180: 0a 2b 23 20 54 49 50 23 33 33 32 2c 20 48 61 6c .+# TIP#332, Hal
0190: 66 20 43 6c 6f 73 65 20 6d 61 64 65 20 70 75 62 f Close made pub
01a0: 6c 69 63 0a 2b 64 65 63 6c 61 72 65 20 36 30 35 lic.+declare 605
01b0: 20 67 65 6e 65 72 69 63 20 7b 0a 2b 20 20 20 20 generic {.+
01c0: 69 6e 74 20 54 63 6c 5f 43 6c 6f 73 65 45 78 28 int Tcl_CloseEx(
01d0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 Tcl_Interp *inte
01e0: 72 70 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 rp, Tcl_Channel
01f0: 63 68 61 6e 2c 20 69 6e 74 20 66 6c 61 67 73 29 chan, int flags)
0200: 0a 2b 7d 0a 2b 0a 20 23 23 23 23 23 23 23 23 23 .+}.+. #########
0210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0250: 23 23 23 23 23 0a 20 0a 20 23 20 44 65 66 69 6e #####. . # Defin
0260: 65 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 73 e the platform s
0270: 70 65 63 69 66 69 63 20 70 75 62 6c 69 63 20 54 pecific public T
0280: 63 6c 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54 cl interface. T
0290: 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 hese functions a
02a0: 72 65 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 re.Index: generi
02b0: 63 2f 74 63 6c 44 65 63 6c 73 2e 68 0a 3d 3d 3d c/tclDecls.h.===
02c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
02d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
02e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
02f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0300: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 .RCS file: /cvsr
0310: 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 oot/tcl/tcl/gene
0320: 72 69 63 2f 74 63 6c 44 65 63 6c 73 2e 68 2c 76 ric/tclDecls.h,v
0330: 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 .retrieving revi
0340: 73 69 6f 6e 20 31 2e 31 35 36 0a 64 69 66 66 20 sion 1.156.diff
0350: 2d 75 20 2d 72 31 2e 31 35 36 20 74 63 6c 44 65 -u -r1.156 tclDe
0360: 63 6c 73 2e 68 0a 2d 2d 2d 20 67 65 6e 65 72 69 cls.h.--- generi
0370: 63 2f 74 63 6c 44 65 63 6c 73 2e 68 09 31 37 20 c/tclDecls.h.17
0380: 4e 6f 76 20 32 30 30 38 20 32 32 3a 31 35 3a 33 Nov 2008 22:15:3
0390: 34 20 2d 30 30 30 30 09 31 2e 31 35 36 0a 2b 2b 4 -0000.1.156.++
03a0: 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 44 65 63 + generic/tclDec
03b0: 6c 73 2e 68 09 31 20 44 65 63 20 32 30 30 38 20 ls.h.1 Dec 2008
03c0: 31 34 3a 31 36 3a 34 32 20 2d 30 30 30 30 0a 40 14:16:42 -0000.@
03d0: 40 20 2d 33 36 35 37 2c 36 20 2b 33 36 35 37 2c @ -3657,6 +3657,
03e0: 31 32 20 40 40 0a 20 09 09 09 09 63 6f 6e 73 74 12 @@. ....const
03f0: 20 54 63 6c 5f 41 72 67 76 49 6e 66 6f 20 2a 20 Tcl_ArgvInfo *
0400: 61 72 67 54 61 62 6c 65 2c 20 69 6e 74 20 2a 20 argTable, int *
0410: 6f 62 6a 63 50 74 72 2c 0a 20 09 09 09 09 54 63 objcPtr,. ....Tc
0420: 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 2a 20 6f l_Obj *const * o
0430: 62 6a 76 2c 20 54 63 6c 5f 4f 62 6a 20 2a 2a 2a bjv, Tcl_Obj ***
0440: 20 72 65 6d 4f 62 6a 76 29 3b 0a 20 23 65 6e 64 remObjv);. #end
0450: 69 66 0a 2b 23 69 66 6e 64 65 66 20 54 63 6c 5f if.+#ifndef Tcl_
0460: 43 6c 6f 73 65 45 78 5f 54 43 4c 5f 44 45 43 4c CloseEx_TCL_DECL
0470: 41 52 45 44 0a 2b 23 64 65 66 69 6e 65 20 54 63 ARED.+#define Tc
0480: 6c 5f 43 6c 6f 73 65 45 78 5f 54 43 4c 5f 44 45 l_CloseEx_TCL_DE
0490: 43 4c 41 52 45 44 0a 2b 2f 2a 20 36 30 35 20 2a CLARED.+/* 605 *
04a0: 2f 0a 2b 45 58 54 45 52 4e 20 69 6e 74 09 09 54 /.+EXTERN int..T
04b0: 63 6c 5f 43 6c 6f 73 65 45 78 20 28 54 63 6c 5f cl_CloseEx (Tcl_
04c0: 49 6e 74 65 72 70 20 2a 20 69 6e 74 65 72 70 2c Interp * interp,
04d0: 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 68 61 Tcl_Channel cha
04e0: 6e 2c 0a 2b 09 09 09 09 69 6e 74 20 66 6c 61 67 n,.+....int flag
04f0: 73 29 3b 0a 2b 23 65 6e 64 69 66 0a 20 0a 20 74 s);.+#endif. . t
0500: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 63 ypedef struct Tc
0510: 6c 53 74 75 62 48 6f 6f 6b 73 20 7b 0a 20 20 20 lStubHooks {.
0520: 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 54 const struct T
0530: 63 6c 50 6c 61 74 53 74 75 62 73 20 2a 74 63 6c clPlatStubs *tcl
0540: 50 6c 61 74 53 74 75 62 73 3b 0a 40 40 20 2d 34 PlatStubs;.@@ -4
0550: 33 32 31 2c 36 20 2b 34 33 32 37 2c 37 20 40 40 321,6 +4327,7 @@
0560: 0a 20 20 20 20 20 69 6e 74 20 28 2a 74 63 6c 5f . int (*tcl_
0570: 53 65 74 45 6e 73 65 6d 62 6c 65 50 61 72 61 6d SetEnsembleParam
0580: 65 74 65 72 4c 69 73 74 29 20 28 54 63 6c 5f 49 eterList) (Tcl_I
0590: 6e 74 65 72 70 20 2a 20 69 6e 74 65 72 70 2c 20 nterp * interp,
05a0: 54 63 6c 5f 43 6f 6d 6d 61 6e 64 20 74 6f 6b 65 Tcl_Command toke
05b0: 6e 2c 20 54 63 6c 5f 4f 62 6a 20 2a 20 70 61 72 n, Tcl_Obj * par
05c0: 61 6d 4c 69 73 74 29 3b 20 2f 2a 20 36 30 32 20 amList); /* 602
05d0: 2a 2f 0a 20 20 20 20 20 69 6e 74 20 28 2a 74 63 */. int (*tc
05e0: 6c 5f 47 65 74 45 6e 73 65 6d 62 6c 65 50 61 72 l_GetEnsemblePar
05f0: 61 6d 65 74 65 72 4c 69 73 74 29 20 28 54 63 6c ameterList) (Tcl
0600: 5f 49 6e 74 65 72 70 20 2a 20 69 6e 74 65 72 70 _Interp * interp
0610: 2c 20 54 63 6c 5f 43 6f 6d 6d 61 6e 64 20 74 6f , Tcl_Command to
0620: 6b 65 6e 2c 20 54 63 6c 5f 4f 62 6a 20 2a 2a 20 ken, Tcl_Obj **
0630: 70 61 72 61 6d 4c 69 73 74 50 74 72 29 3b 20 2f paramListPtr); /
0640: 2a 20 36 30 33 20 2a 2f 0a 20 20 20 20 20 69 6e * 603 */. in
0650: 74 20 28 2a 74 63 6c 5f 50 61 72 73 65 41 72 67 t (*tcl_ParseArg
0660: 73 4f 62 6a 76 29 20 28 54 63 6c 5f 49 6e 74 65 sObjv) (Tcl_Inte
0670: 72 70 20 2a 20 69 6e 74 65 72 70 2c 20 63 6f 6e rp * interp, con
0680: 73 74 20 54 63 6c 5f 41 72 67 76 49 6e 66 6f 20 st Tcl_ArgvInfo
0690: 2a 20 61 72 67 54 61 62 6c 65 2c 20 69 6e 74 20 * argTable, int
06a0: 2a 20 6f 62 6a 63 50 74 72 2c 20 54 63 6c 5f 4f * objcPtr, Tcl_O
06b0: 62 6a 20 2a 63 6f 6e 73 74 20 2a 20 6f 62 6a 76 bj *const * objv
06c0: 2c 20 54 63 6c 5f 4f 62 6a 20 2a 2a 2a 20 72 65 , Tcl_Obj *** re
06d0: 6d 4f 62 6a 76 29 3b 20 2f 2a 20 36 30 34 20 2a mObjv); /* 604 *
06e0: 2f 0a 2b 20 20 20 20 69 6e 74 20 28 2a 74 63 6c /.+ int (*tcl
06f0: 5f 43 6c 6f 73 65 45 78 29 20 28 54 63 6c 5f 49 _CloseEx) (Tcl_I
0700: 6e 74 65 72 70 20 2a 20 69 6e 74 65 72 70 2c 20 nterp * interp,
0710: 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 68 61 6e Tcl_Channel chan
0720: 2c 20 69 6e 74 20 66 6c 61 67 73 29 3b 20 2f 2a , int flags); /*
0730: 20 36 30 35 20 2a 2f 0a 20 7d 20 54 63 6c 53 74 605 */. } TclSt
0740: 75 62 73 3b 0a 20 0a 20 23 69 66 20 64 65 66 69 ubs;. . #if defi
0750: 6e 65 64 28 55 53 45 5f 54 43 4c 5f 53 54 55 42 ned(USE_TCL_STUB
0760: 53 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 55 S) && !defined(U
0770: 53 45 5f 54 43 4c 5f 53 54 55 42 5f 50 52 4f 43 SE_TCL_STUB_PROC
0780: 53 29 0a 40 40 20 2d 36 38 31 33 2c 36 20 2b 36 S).@@ -6813,6 +6
0790: 38 32 30 2c 31 30 20 40 40 0a 20 23 64 65 66 69 820,10 @@. #defi
07a0: 6e 65 20 54 63 6c 5f 50 61 72 73 65 41 72 67 73 ne Tcl_ParseArgs
07b0: 4f 62 6a 76 20 5c 0a 20 09 28 74 63 6c 53 74 75 Objv \. .(tclStu
07c0: 62 73 50 74 72 2d 3e 74 63 6c 5f 50 61 72 73 65 bsPtr->tcl_Parse
07d0: 41 72 67 73 4f 62 6a 76 29 20 2f 2a 20 36 30 34 ArgsObjv) /* 604
07e0: 20 2a 2f 0a 20 23 65 6e 64 69 66 0a 2b 23 69 66 */. #endif.+#if
07f0: 6e 64 65 66 20 54 63 6c 5f 43 6c 6f 73 65 45 78 ndef Tcl_CloseEx
0800: 0a 2b 23 64 65 66 69 6e 65 20 54 63 6c 5f 43 6c .+#define Tcl_Cl
0810: 6f 73 65 45 78 20 5c 0a 2b 09 28 74 63 6c 53 74 oseEx \.+.(tclSt
0820: 75 62 73 50 74 72 2d 3e 74 63 6c 5f 43 6c 6f 73 ubsPtr->tcl_Clos
0830: 65 45 78 29 20 2f 2a 20 36 30 35 20 2a 2f 0a 2b eEx) /* 605 */.+
0840: 23 65 6e 64 69 66 0a 20 0a 20 23 65 6e 64 69 66 #endif. . #endif
0850: 20 2f 2a 20 64 65 66 69 6e 65 64 28 55 53 45 5f /* defined(USE_
0860: 54 43 4c 5f 53 54 55 42 53 29 20 26 26 20 21 64 TCL_STUBS) && !d
0870: 65 66 69 6e 65 64 28 55 53 45 5f 54 43 4c 5f 53 efined(USE_TCL_S
0880: 54 55 42 5f 50 52 4f 43 53 29 20 2a 2f 0a 20 0a TUB_PROCS) */. .
0890: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 Index: generic/t
08a0: 63 6c 49 4f 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d clIO.c.=========
08b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
08e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 ==========.RCS f
08f0: 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 ile: /cvsroot/tc
0900: 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 l/tcl/generic/tc
0910: 6c 49 4f 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 lIO.c,v.retrievi
0920: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 35 ng revision 1.15
0930: 30 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 31 35 0.diff -u -r1.15
0940: 30 20 74 63 6c 49 4f 2e 63 0a 2d 2d 2d 20 67 65 0 tclIO.c.--- ge
0950: 6e 65 72 69 63 2f 74 63 6c 49 4f 2e 63 09 32 35 neric/tclIO.c.25
0960: 20 4e 6f 76 20 32 30 30 38 20 32 33 3a 31 39 3a Nov 2008 23:19:
0970: 30 31 20 2d 30 30 30 30 09 31 2e 31 35 30 0a 2b 01 -0000.1.150.+
0980: 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 4f ++ generic/tclIO
0990: 2e 63 09 31 20 44 65 63 20 32 30 30 38 20 31 34 .c.1 Dec 2008 14
09a0: 3a 31 36 3a 34 32 20 2d 30 30 30 30 0a 40 40 20 :16:42 -0000.@@
09b0: 2d 33 30 32 38 2c 36 20 2b 33 30 32 38 2c 31 33 -3028,6 +3028,13
09c0: 37 20 40 40 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 7 @@. /*. *----
09d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
09e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
09f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0a10: 2d 2d 0a 20 20 2a 0a 2b 20 2a 20 54 63 6c 5f 43 --. *.+ * Tcl_C
0a20: 6c 6f 73 65 45 78 20 2d 2d 0a 2b 20 2a 0a 2b 20 loseEx --.+ *.+
0a30: 2a 09 48 61 6c 66 20 63 6c 6f 73 65 73 20 61 20 *.Half closes a
0a40: 63 68 61 6e 6e 65 6c 2e 0a 2b 20 2a 0a 2b 20 2a channel..+ *.+ *
0a50: 20 52 65 73 75 6c 74 73 3a 0a 2b 20 2a 09 41 20 Results:.+ *.A
0a60: 73 74 61 6e 64 61 72 64 20 54 63 6c 20 72 65 73 standard Tcl res
0a70: 75 6c 74 2e 0a 2b 20 2a 0a 2b 20 2a 20 53 69 64 ult..+ *.+ * Sid
0a80: 65 20 65 66 66 65 63 74 73 3a 0a 2b 20 2a 09 43 e effects:.+ *.C
0a90: 6c 6f 73 65 73 20 6f 6e 65 20 64 69 72 65 63 74 loses one direct
0aa0: 69 6f 6e 20 6f 66 20 74 68 65 20 63 68 61 6e 6e ion of the chann
0ab0: 65 6c 2e 0a 2b 20 2a 0a 2b 20 2a 20 4e 4f 54 45 el..+ *.+ * NOTE
0ac0: 3a 0a 2b 20 2a 09 54 63 6c 5f 43 6c 6f 73 65 45 :.+ *.Tcl_CloseE
0ad0: 78 20 63 6c 6f 73 65 73 20 74 68 65 20 73 70 65 x closes the spe
0ae0: 63 69 66 69 65 64 20 64 69 72 65 63 74 69 6f 6e cified direction
0af0: 20 6f 66 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 of the channel
0b00: 61 73 20 66 61 72 20 61 73 0a 2b 20 2a 09 74 68 as far as.+ *.th
0b10: 65 20 75 73 65 72 20 69 73 20 63 6f 6e 63 65 72 e user is concer
0b20: 6e 65 64 2e 20 54 68 65 20 63 68 61 6e 6e 65 6c ned. The channel
0b30: 20 6b 65 65 70 73 20 65 78 69 73 74 69 6e 67 20 keeps existing
0b40: 68 6f 77 65 76 65 72 2e 20 59 6f 75 20 63 61 6e however. You can
0b50: 6e 6f 74 0a 2b 20 2a 09 63 61 6c 6c 73 20 74 68 not.+ *.calls th
0b60: 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 is function to c
0b70: 6c 6f 73 65 20 74 68 65 20 6c 61 73 74 20 70 6f lose the last po
0b80: 73 73 69 62 6c 65 20 64 69 72 65 63 74 69 6f 6e ssible direction
0b90: 20 6f 66 20 74 68 65 0a 2b 20 2a 09 63 68 61 6e of the.+ *.chan
0ba0: 6e 65 6c 2e 20 55 73 65 20 54 63 6c 5f 43 6c 6f nel. Use Tcl_Clo
0bb0: 73 65 20 66 6f 72 20 74 68 61 74 2e 0a 2b 20 2a se for that..+ *
0bc0: 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .+ *------------
0bd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a ----------.+ */.
0c10: 2b 0a 2b 09 2f 2a 20 41 52 47 53 55 53 45 44 20 +.+./* ARGSUSED
0c20: 2a 2f 0a 2b 69 6e 74 0a 2b 54 63 6c 5f 43 6c 6f */.+int.+Tcl_Clo
0c30: 73 65 45 78 28 0a 2b 20 20 20 20 54 63 6c 5f 49 seEx(.+ Tcl_I
0c40: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 09 09 nterp *interp,..
0c50: 2f 2a 20 49 6e 74 65 72 70 72 65 74 65 72 20 66 /* Interpreter f
0c60: 6f 72 20 65 72 72 6f 72 73 2e 20 2a 2f 0a 2b 20 or errors. */.+
0c70: 20 20 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 Tcl_Channel c
0c80: 68 61 6e 2c 09 09 2f 2a 20 54 68 65 20 63 68 61 han,../* The cha
0c90: 6e 6e 65 6c 20 62 65 69 6e 67 20 63 6c 6f 73 65 nnel being close
0ca0: 64 2e 20 4d 61 79 20 73 74 69 6c 6c 20 62 65 20 d. May still be
0cb0: 75 73 65 64 20 62 79 20 73 6f 6d 65 20 69 6e 74 used by some int
0cc0: 65 72 70 72 65 74 65 72 20 2a 2f 0a 2b 20 20 20 erpreter */.+
0cd0: 20 69 6e 74 20 66 6c 61 67 73 29 20 20 20 20 20 int flags)
0ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 /*
0cf0: 46 6c 61 67 73 20 74 65 6c 6c 69 6e 67 20 75 73 Flags telling us
0d00: 20 77 68 69 63 68 20 73 69 64 65 20 74 6f 20 63 which side to c
0d10: 6c 6f 73 65 2e 20 2a 2f 0a 2b 7b 0a 2b 20 20 20 lose. */.+{.+
0d20: 20 43 68 61 6e 6e 65 6c 20 2a 63 68 61 6e 50 74 Channel *chanPt
0d30: 72 3b 09 09 2f 2a 20 54 68 65 20 72 65 61 6c 20 r;../* The real
0d40: 49 4f 20 63 68 61 6e 6e 65 6c 2e 20 2a 2f 0a 2b IO channel. */.+
0d50: 20 20 20 20 43 68 61 6e 6e 65 6c 53 74 61 74 65 ChannelState
0d60: 20 2a 73 74 61 74 65 50 74 72 3b 09 2f 2a 20 53 *statePtr;./* S
0d70: 74 61 74 65 20 6f 66 20 72 65 61 6c 20 49 4f 20 tate of real IO
0d80: 63 68 61 6e 6e 65 6c 2e 20 2a 2f 0a 2b 20 20 20 channel. */.+
0d90: 20 69 6e 74 20 72 65 73 75 6c 74 3b 09 09 09 2f int result;.../
0da0: 2a 20 4f 66 20 63 61 6c 6c 69 6e 67 20 46 6c 75 * Of calling Flu
0db0: 73 68 43 68 61 6e 6e 65 6c 2e 20 2a 2f 0a 2b 0a shChannel. */.+.
0dc0: 2b 20 20 20 20 69 66 20 28 63 68 61 6e 20 3d 3d + if (chan ==
0dd0: 20 4e 55 4c 4c 29 20 7b 0a 2b 09 72 65 74 75 72 NULL) {.+.retur
0de0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 20 20 20 20 7d n TCL_OK;.+ }
0df0: 0a 2b 0a 2b 20 20 20 20 2f 2a 20 54 4f 44 4f 3a .+.+ /* TODO:
0e00: 20 61 73 73 65 72 74 20 66 6c 61 67 73 20 76 61 assert flags va
0e10: 6c 69 64 69 74 79 20 3f 20 2a 2f 0a 2b 0a 2b 20 lidity ? */.+.+
0e20: 20 20 20 63 68 61 6e 50 74 72 20 3d 20 28 43 68 chanPtr = (Ch
0e30: 61 6e 6e 65 6c 20 2a 29 20 63 68 61 6e 3b 0a 2b annel *) chan;.+
0e40: 20 20 20 20 73 74 61 74 65 50 74 72 20 3d 20 63 statePtr = c
0e50: 68 61 6e 50 74 72 2d 3e 73 74 61 74 65 3b 0a 2b hanPtr->state;.+
0e60: 0a 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a .+ /*.+ *
0e70: 20 44 6f 65 73 20 74 68 65 20 63 68 61 6e 6e 65 Does the channe
0e80: 6c 20 73 75 70 70 6f 72 74 20 68 61 6c 66 2d 63 l support half-c
0e90: 6c 6f 73 65 20 61 6e 79 77 61 79 20 3f 20 45 72 lose anyway ? Er
0ea0: 72 6f 72 20 69 66 20 6e 6f 74 2e 0a 2b 20 20 20 ror if not..+
0eb0: 20 20 2a 2f 0a 2b 0a 2b 20 20 20 20 69 66 20 28 */.+.+ if (
0ec0: 21 63 68 61 6e 50 74 72 2d 3e 74 79 70 65 50 74 !chanPtr->typePt
0ed0: 72 2d 3e 63 6c 6f 73 65 32 50 72 6f 63 29 20 7b r->close2Proc) {
0ee0: 0a 2b 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 .+.Tcl_AppendRes
0ef0: 75 6c 74 20 28 69 6e 74 65 72 70 2c 20 22 48 61 ult (interp, "Ha
0f00: 6c 66 2d 63 6c 6f 73 65 20 6f 66 20 63 68 61 6e lf-close of chan
0f10: 6e 65 6c 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 nels not support
0f20: 65 64 20 62 79 20 22 2c 0a 2b 09 09 09 20 20 63 ed by ",.+... c
0f30: 68 61 6e 50 74 72 2d 3e 74 79 70 65 50 74 72 2d hanPtr->typePtr-
0f40: 3e 74 79 70 65 4e 61 6d 65 2c 20 22 73 22 2c 20 >typeName, "s",
0f50: 4e 55 4c 4c 29 3b 0a 2b 09 72 65 74 75 72 6e 20 NULL);.+.return
0f60: 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 TCL_ERROR;.+
0f70: 7d 0a 2b 0a 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 }.+.+ /*.+
0f80: 20 20 2a 20 49 73 20 74 68 65 20 63 68 61 6e 6e * Is the chann
0f90: 65 6c 20 75 6e 73 74 61 63 6b 65 64 20 3f 20 49 el unstacked ? I
0fa0: 66 20 6e 6f 74 20 77 65 20 66 61 69 6c 2e 0a 2b f not we fail..+
0fb0: 20 20 20 20 20 2a 2f 0a 2b 0a 2b 20 20 20 20 69 */.+.+ i
0fc0: 66 20 28 63 68 61 6e 50 74 72 20 21 3d 20 73 74 f (chanPtr != st
0fd0: 61 74 65 50 74 72 2d 3e 74 6f 70 43 68 61 6e 50 atePtr->topChanP
0fe0: 74 72 29 20 7b 0a 2b 09 54 63 6c 5f 41 70 70 65 tr) {.+.Tcl_Appe
0ff0: 6e 64 52 65 73 75 6c 74 20 28 69 6e 74 65 72 70 ndResult (interp
1000: 2c 0a 2b 09 09 09 20 20 22 48 61 6c 66 2d 63 6c ,.+... "Half-cl
1010: 6f 73 65 20 6e 6f 74 20 61 70 70 6c 69 63 61 62 ose not applicab
1020: 6c 65 20 74 6f 20 73 74 61 63 6b 20 6f 66 20 74 le to stack of t
1030: 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 73 22 2c ransformations",
1040: 0a 2b 09 09 09 20 20 4e 55 4c 4c 29 3b 0a 2b 09 .+... NULL);.+.
1050: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
1060: 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 0a 2b ;.+ }.+ .+
1070: 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a 20 43 /*.+ * C
1080: 68 65 63 6b 20 64 69 72 65 63 74 69 6f 6e 20 61 heck direction a
1090: 67 61 69 6e 73 74 20 63 68 61 6e 6e 65 6c 20 6d gainst channel m
10a0: 6f 64 65 2e 20 49 74 20 69 73 20 61 6e 20 65 72 ode. It is an er
10b0: 72 6f 72 20 69 66 20 77 65 20 74 72 79 20 74 6f ror if we try to
10c0: 20 63 6c 6f 73 65 0a 2b 20 20 20 20 20 2a 20 61 close.+ * a
10d0: 20 64 69 72 65 63 74 69 6f 6e 20 6e 6f 74 20 73 direction not s
10e0: 75 70 70 6f 72 74 65 64 20 62 79 20 74 68 65 20 upported by the
10f0: 63 68 61 6e 6e 65 6c 20 28 61 6c 72 65 61 64 79 channel (already
1100: 20 63 6c 6f 73 65 64 2c 20 6f 72 20 6e 65 76 65 closed, or neve
1110: 72 0a 2b 20 20 20 20 20 2a 20 6f 70 65 6e 65 64 r.+ * opened
1120: 20 66 6f 72 20 74 68 61 74 20 64 69 72 65 63 74 for that direct
1130: 69 6f 6e 29 2e 0a 2b 20 20 20 20 20 2a 2f 0a 2b ion)..+ */.+
1140: 0a 2b 20 20 20 20 69 66 20 28 21 28 73 74 61 74 .+ if (!(stat
1150: 65 50 74 72 2d 3e 66 6c 61 67 73 20 26 20 28 54 ePtr->flags & (T
1160: 43 4c 5f 52 45 41 44 41 42 4c 45 20 7c 20 54 43 CL_READABLE | TC
1170: 4c 5f 57 52 49 54 41 42 4c 45 29 20 26 20 66 6c L_WRITABLE) & fl
1180: 61 67 73 29 29 20 7b 0a 2b 09 63 6f 6e 73 74 20 ags)) {.+.const
1190: 63 68 61 72 20 2a 6d 73 67 3b 0a 2b 09 69 66 20 char *msg;.+.if
11a0: 28 66 6c 61 67 73 20 26 20 54 43 4c 5f 43 4c 4f (flags & TCL_CLO
11b0: 53 45 5f 52 45 41 44 29 20 7b 0a 2b 09 20 20 20 SE_READ) {.+.
11c0: 20 6d 73 67 20 3d 20 22 72 65 61 64 22 3b 0a 2b msg = "read";.+
11d0: 09 7d 20 65 6c 73 65 20 7b 0a 2b 09 20 20 20 20 .} else {.+.
11e0: 6d 73 67 20 3d 20 22 77 72 69 74 65 22 3b 0a 2b msg = "write";.+
11f0: 09 7d 0a 2b 09 54 63 6c 5f 41 70 70 65 6e 64 52 .}.+.Tcl_AppendR
1200: 65 73 75 6c 74 20 28 69 6e 74 65 72 70 2c 20 22 esult (interp, "
1210: 48 61 6c 66 2d 63 6c 6f 73 65 20 6f 66 20 22 2c Half-close of ",
1220: 20 6d 73 67 2c 0a 2b 09 09 09 20 20 20 20 20 20 msg,.+...
1230: 22 2d 73 69 64 65 20 6e 6f 74 20 70 6f 73 73 69 "-side not possi
1240: 62 6c 65 2c 20 6e 6f 74 20 73 75 70 70 6f 72 74 ble, not support
1250: 65 64 20 62 79 20 63 68 61 6e 6e 65 6c 22 2c 0a ed by channel",.
1260: 2b 09 09 09 20 20 20 20 20 20 4e 55 4c 4c 29 3b +... NULL);
1270: 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 .+.return TCL_ER
1280: 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 ROR;.+ }.+.+
1290: 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a 20 41 20 /*.+ * A
12a0: 75 73 65 72 20 6d 61 79 20 74 72 79 20 74 6f 20 user may try to
12b0: 63 61 6c 6c 20 68 61 6c 66 2d 63 6c 6f 73 65 20 call half-close
12c0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 63 68 from within a ch
12d0: 61 6e 6e 65 6c 20 63 6c 6f 73 65 0a 2b 20 20 20 annel close.+
12e0: 20 20 2a 20 68 61 6e 64 6c 65 72 2e 20 54 68 61 * handler. Tha
12f0: 74 20 77 6f 6e 27 74 20 64 6f 2e 0a 2b 20 20 20 t won't do..+
1300: 20 20 2a 2f 0a 2b 0a 2b 20 20 20 20 69 66 20 28 */.+.+ if (
1310: 73 74 61 74 65 50 74 72 2d 3e 66 6c 61 67 73 20 statePtr->flags
1320: 26 20 43 48 41 4e 4e 45 4c 5f 49 4e 43 4c 4f 53 & CHANNEL_INCLOS
1330: 45 29 20 7b 0a 2b 09 69 66 20 28 69 6e 74 65 72 E) {.+.if (inter
1340: 70 29 20 7b 0a 2b 09 20 20 20 20 54 63 6c 5f 41 p) {.+. Tcl_A
1350: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 ppendResult(inte
1360: 72 70 2c 20 22 49 6c 6c 65 67 61 6c 20 72 65 63 rp, "Illegal rec
1370: 75 72 73 69 76 65 20 63 61 6c 6c 20 74 6f 20 63 ursive call to c
1380: 6c 6f 73 65 20 22 0a 2b 09 09 20 20 20 20 22 74 lose ".+.. "t
1390: 68 72 6f 75 67 68 20 63 6c 6f 73 65 2d 68 61 6e hrough close-han
13a0: 64 6c 65 72 20 6f 66 20 63 68 61 6e 6e 65 6c 22 dler of channel"
13b0: 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 7d 0a 2b 09 72 , NULL);.+.}.+.r
13c0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
13d0: 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 2f .+ }.+.+ /
13e0: 2a 0a 2b 20 20 20 20 20 2a 20 46 69 6e 61 6c 6c *.+ * Finall
13f0: 79 20 64 6f 20 77 68 61 74 20 69 73 20 61 73 6b y do what is ask
1400: 65 64 20 6f 66 20 75 73 2e 0a 2b 20 20 20 20 20 ed of us..+
1410: 2a 2f 0a 2b 0a 2b 20 20 20 20 72 65 73 75 6c 74 */.+.+ result
1420: 20 3d 20 63 68 61 6e 50 74 72 2d 3e 74 79 70 65 = chanPtr->type
1430: 50 74 72 2d 3e 63 6c 6f 73 65 32 50 72 6f 63 28 Ptr->close2Proc(
1440: 63 68 61 6e 50 74 72 2d 3e 69 6e 73 74 61 6e 63 chanPtr->instanc
1450: 65 44 61 74 61 2c 20 69 6e 74 65 72 70 2c 0a 2b eData, interp,.+
1460: 09 09 09 09 09 20 20 66 6c 61 67 73 29 3b 0a 2b ..... flags);.+
1470: 0a 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a .+ /*.+ *
1480: 20 54 49 50 20 23 32 31 39 2e 0a 2b 20 20 20 20 TIP #219..+
1490: 20 2a 20 43 61 70 74 75 72 65 20 65 72 72 6f 72 * Capture error
14a0: 20 6d 65 73 73 61 67 65 73 20 70 75 74 20 62 79 messages put by
14b0: 20 74 68 65 20 64 72 69 76 65 72 20 69 6e 74 6f the driver into
14c0: 20 74 68 65 20 62 79 70 61 73 73 20 61 72 65 61 the bypass area
14d0: 20 61 6e 64 20 70 75 74 0a 2b 20 20 20 20 20 2a and put.+ *
14e0: 20 74 68 65 6d 20 69 6e 74 6f 20 74 68 65 20 72 them into the r
14f0: 65 67 75 6c 61 72 20 69 6e 74 65 72 70 72 65 74 egular interpret
1500: 65 72 20 72 65 73 75 6c 74 2e 0a 2b 20 20 20 20 er result..+
1510: 20 2a 0a 2b 09 20 2a 0a 2b 09 20 2a 20 5b 41 6c *.+. *.+. * [Al
1520: 65 78 3a 20 49 20 64 6f 6e 27 74 20 75 6e 64 65 ex: I don't unde
1530: 72 73 74 61 6e 64 20 74 68 65 20 63 6f 6d 6d 65 rstand the comme
1540: 6e 74 20 62 65 6c 6f 77 2e 20 54 68 65 20 68 61 nt below. The ha
1550: 6c 66 2d 63 6c 6f 73 65 20 70 72 65 73 65 72 76 lf-close preserv
1560: 65 73 20 63 68 61 6e 50 74 72 20 5d 0a 2b 09 20 es chanPtr ].+.
1570: 2a 0a 2b 20 20 20 20 20 2a 20 4e 6f 74 65 73 3a *.+ * Notes:
1580: 20 44 75 65 20 74 6f 20 74 68 65 20 61 73 73 65 Due to the asse
1590: 72 74 69 6f 6e 20 6f 66 20 43 48 41 4e 4e 45 4c rtion of CHANNEL
15a0: 5f 43 4c 4f 53 45 44 20 69 6e 20 74 68 65 20 66 _CLOSED in the f
15b0: 6c 61 67 73 0a 2b 20 20 20 20 20 2a 20 46 6c 75 lags.+ * Flu
15c0: 73 68 43 68 61 6e 6e 65 6c 28 29 20 68 61 73 20 shChannel() has
15d0: 63 61 6c 6c 65 64 20 43 6c 6f 73 65 43 68 61 6e called CloseChan
15e0: 6e 65 6c 28 29 20 61 6e 64 20 74 68 75 73 20 66 nel() and thus f
15f0: 72 65 65 64 20 61 6c 6c 20 74 68 65 20 63 68 61 reed all the cha
1600: 6e 6e 65 6c 0a 2b 20 20 20 20 20 2a 20 73 74 72 nnel.+ * str
1610: 75 63 74 75 72 65 73 2e 20 57 65 20 6d 75 73 74 uctures. We must
1620: 20 6e 6f 74 20 74 72 79 20 74 6f 20 61 63 63 65 not try to acce
1630: 73 73 20 22 63 68 61 6e 22 20 61 6e 79 6d 6f 72 ss "chan" anymor
1640: 65 2c 20 68 65 6e 63 65 20 74 68 65 20 4e 55 4c e, hence the NUL
1650: 4c 0a 2b 20 20 20 20 20 2a 20 61 72 67 75 6d 65 L.+ * argume
1660: 6e 74 20 69 6e 20 74 68 65 20 63 61 6c 6c 20 62 nt in the call b
1670: 65 6c 6f 77 2e 20 54 68 65 20 6f 6e 6c 79 20 70 elow. The only p
1680: 6c 61 63 65 20 77 68 69 63 68 20 6d 61 79 20 73 lace which may s
1690: 74 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 61 0a 2b till contain a.+
16a0: 20 20 20 20 20 2a 20 6d 65 73 73 61 67 65 20 69 * message i
16b0: 73 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 s the interprete
16c0: 72 20 69 74 73 65 6c 66 2c 20 61 6e 64 20 22 43 r itself, and "C
16d0: 6c 6f 73 65 43 68 61 6e 6e 65 6c 22 20 6d 61 64 loseChannel" mad
16e0: 65 20 73 75 72 65 20 74 6f 20 6c 69 66 74 0a 2b e sure to lift.+
16f0: 20 20 20 20 20 2a 20 61 6e 79 20 63 68 61 6e 6e * any chann
1700: 65 6c 20 6d 65 73 73 61 67 65 20 69 74 20 67 65 el message it ge
1710: 6e 65 72 61 74 65 64 20 69 6e 74 6f 20 69 74 2e nerated into it.
1720: 0a 2b 20 20 20 20 20 2a 2f 0a 2b 0a 2b 20 20 20 .+ */.+.+
1730: 20 69 66 20 28 54 63 6c 43 68 61 6e 43 61 75 67 if (TclChanCaug
1740: 68 74 45 72 72 6f 72 42 79 70 61 73 73 28 69 6e htErrorBypass(in
1750: 74 65 72 70 2c 20 4e 55 4c 4c 29 29 20 7b 0a 2b terp, NULL)) {.+
1760: 09 72 65 73 75 6c 74 20 3d 20 45 49 4e 56 41 4c .result = EINVAL
1770: 3b 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 ;.+ }.+.+
1780: 69 66 20 28 72 65 73 75 6c 74 20 21 3d 20 30 29 if (result != 0)
1790: 20 7b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f {.+.return TCL_
17a0: 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b 0a ERROR;.+ }.+.
17b0: 2b 09 73 74 61 74 65 50 74 72 2d 3e 66 6c 61 67 +.statePtr->flag
17c0: 73 20 26 3d 20 7e 28 66 6c 61 67 73 20 26 20 28 s &= ~(flags & (
17d0: 54 43 4c 5f 52 45 41 44 41 42 4c 45 20 7c 20 54 TCL_READABLE | T
17e0: 43 4c 5f 57 52 49 54 41 42 4c 45 29 29 3b 0a 2b CL_WRITABLE));.+
17f0: 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c .+ return TCL
1800: 5f 4f 4b 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a 0a 2b _OK;.+}.+..+/*.+
1810: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *--------------
1820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1850: 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 20 20 2a --------.+ *. *
1860: 20 54 63 6c 5f 43 6c 65 61 72 43 68 61 6e 6e 65 Tcl_ClearChanne
1870: 6c 48 61 6e 64 6c 65 72 73 20 2d 2d 0a 20 20 2a lHandlers --. *
1880: 0a 20 20 2a 09 52 65 6d 6f 76 65 73 20 61 6c 6c . *.Removes all
1890: 20 63 68 61 6e 6e 65 6c 20 68 61 6e 64 6c 65 72 channel handler
18a0: 73 20 61 6e 64 20 65 76 65 6e 74 20 73 63 72 69 s and event scri
18b0: 70 74 73 20 66 72 6f 6d 20 74 68 65 20 63 68 61 pts from the cha
18c0: 6e 6e 65 6c 2c 0a 49 6e 64 65 78 3a 20 67 65 6e nnel,.Index: gen
18d0: 65 72 69 63 2f 74 63 6c 49 4f 43 6d 64 2e 63 0a eric/tclIOCmd.c.
18e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
18f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1900: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1910: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1920: 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 ===.RCS file: /c
1930: 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 vsroot/tcl/tcl/g
1940: 65 6e 65 72 69 63 2f 74 63 6c 49 4f 43 6d 64 2e eneric/tclIOCmd.
1950: 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 c,v.retrieving r
1960: 65 76 69 73 69 6f 6e 20 31 2e 35 39 0a 64 69 66 evision 1.59.dif
1970: 66 20 2d 75 20 2d 72 31 2e 35 39 20 74 63 6c 49 f -u -r1.59 tclI
1980: 4f 43 6d 64 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72 OCmd.c.--- gener
1990: 69 63 2f 74 63 6c 49 4f 43 6d 64 2e 63 09 31 36 ic/tclIOCmd.c.16
19a0: 20 4f 63 74 20 32 30 30 38 20 32 32 3a 33 34 3a Oct 2008 22:34:
19b0: 31 39 20 2d 30 30 30 30 09 31 2e 35 39 0a 2b 2b 19 -0000.1.59.++
19c0: 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 4f 43 + generic/tclIOC
19d0: 6d 64 2e 63 09 31 20 44 65 63 20 32 30 30 38 20 md.c.1 Dec 2008
19e0: 31 34 3a 31 36 3a 34 33 20 2d 30 30 30 30 0a 40 14:16:43 -0000.@
19f0: 40 20 2d 36 34 38 2c 38 20 2b 36 34 38 2c 38 20 @ -648,8 +648,8
1a00: 40 40 0a 20 7b 0a 20 20 20 20 20 54 63 6c 5f 43 @@. {. Tcl_C
1a10: 68 61 6e 6e 65 6c 20 63 68 61 6e 3b 09 09 2f 2a hannel chan;../*
1a20: 20 54 68 65 20 63 68 61 6e 6e 65 6c 20 74 6f 20 The channel to
1a30: 63 6c 6f 73 65 2e 20 2a 2f 0a 20 0a 2d 20 20 20 close. */. .-
1a40: 20 69 66 20 28 6f 62 6a 63 20 21 3d 20 32 29 20 if (objc != 2)
1a50: 7b 0a 2d 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d {.-.Tcl_WrongNum
1a60: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 Args(interp, 1,
1a70: 6f 62 6a 76 2c 20 22 63 68 61 6e 6e 65 6c 49 64 objv, "channelId
1a80: 22 29 3b 0a 2b 20 20 20 20 69 66 20 28 28 6f 62 ");.+ if ((ob
1a90: 6a 63 20 21 3d 20 32 29 20 26 26 20 28 6f 62 6a jc != 2) && (obj
1aa0: 63 20 21 3d 20 33 29 29 20 7b 0a 2b 09 54 63 6c c != 3)) {.+.Tcl
1ab0: 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e _WrongNumArgs(in
1ac0: 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 terp, 1, objv, "
1ad0: 63 68 61 6e 6e 65 6c 49 64 20 3f 64 69 72 65 63 channelId ?direc
1ae0: 74 69 6f 6e 3f 22 29 3b 0a 20 09 72 65 74 75 72 tion?");. .retur
1af0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 n TCL_ERROR;.
1b00: 20 20 7d 0a 20 0a 40 40 20 2d 36 35 37 2c 36 20 }. .@@ -657,6
1b10: 2b 36 35 37 2c 34 38 20 40 40 0a 20 09 72 65 74 +657,48 @@. .ret
1b20: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 urn TCL_ERROR;.
1b30: 20 20 20 20 7d 0a 20 0a 2b 20 20 20 20 69 66 20 }. .+ if
1b40: 28 6f 62 6a 63 20 3d 3d 20 33 29 20 7b 0a 2b 09 (objc == 3) {.+.
1b50: 69 6e 74 20 6f 70 74 69 6f 6e 49 6e 64 65 78 2c int optionIndex,
1b60: 20 64 69 72 3b 0a 2b 09 73 74 61 74 69 63 20 63 dir;.+.static c
1b70: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 onst char *const
1b80: 20 64 69 72 4f 70 74 69 6f 6e 73 5b 5d 20 3d 20 dirOptions[] =
1b90: 7b 0a 2b 09 20 20 20 20 22 72 65 61 64 22 2c 20 {.+. "read",
1ba0: 22 77 72 69 74 65 22 2c 20 4e 55 4c 4c 0a 2b 09 "write", NULL.+.
1bb0: 7d 3b 0a 2b 09 73 74 61 74 69 63 20 69 6e 74 20 };.+.static int
1bc0: 64 69 72 41 72 72 61 79 5b 5d 20 3d 20 7b 54 43 dirArray[] = {TC
1bd0: 4c 5f 43 4c 4f 53 45 5f 52 45 41 44 2c 20 54 43 L_CLOSE_READ, TC
1be0: 4c 5f 43 4c 4f 53 45 5f 57 52 49 54 45 7d 3b 0a L_CLOSE_WRITE};.
1bf0: 2b 0a 2b 09 2f 2a 0a 2b 09 20 2a 20 47 65 74 20 +.+./*.+. * Get
1c00: 64 69 72 65 63 74 69 6f 6e 20 72 65 71 75 65 73 direction reques
1c10: 74 65 64 20 74 6f 20 63 6c 6f 73 65 2c 20 61 6e ted to close, an
1c20: 64 20 63 68 65 63 6b 20 73 79 6e 74 61 78 2e 0a d check syntax..
1c30: 2b 09 20 2a 2f 0a 2b 0a 2b 09 69 66 20 28 54 63 +. */.+.+.if (Tc
1c40: 6c 5f 47 65 74 49 6e 64 65 78 46 72 6f 6d 4f 62 l_GetIndexFromOb
1c50: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 j(interp, objv[2
1c60: 5d 2c 20 64 69 72 4f 70 74 69 6f 6e 73 2c 20 22 ], dirOptions, "
1c70: 64 69 72 65 63 74 69 6f 6e 22 2c 20 30 2c 0a 2b direction", 0,.+
1c80: 09 09 26 6f 70 74 69 6f 6e 49 6e 64 65 78 29 20 ..&optionIndex)
1c90: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 20 != TCL_OK) {.+.
1ca0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 return TCL_ER
1cb0: 52 4f 52 3b 0a 2b 09 7d 0a 2b 09 64 69 72 20 3d ROR;.+.}.+.dir =
1cc0: 20 64 69 72 41 72 72 61 79 5b 6f 70 74 69 6f 6e dirArray[option
1cd0: 49 6e 64 65 78 5d 3b 0a 2b 0a 2b 09 2f 2a 0a 2b Index];.+.+./*.+
1ce0: 09 20 2a 20 43 68 65 63 6b 20 64 69 72 65 63 74 . * Check direct
1cf0: 69 6f 6e 20 61 67 61 69 6e 73 74 20 63 68 61 6e ion against chan
1d00: 6e 65 6c 20 6d 6f 64 65 2e 20 49 74 20 69 73 20 nel mode. It is
1d10: 61 6e 20 65 72 72 6f 72 20 69 66 20 77 65 20 74 an error if we t
1d20: 72 79 20 74 6f 0a 2b 09 20 2a 20 63 6c 6f 73 65 ry to.+. * close
1d30: 20 61 20 64 69 72 65 63 74 69 6f 6e 20 6e 6f 74 a direction not
1d40: 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 74 68 supported by th
1d50: 65 20 63 68 61 6e 6e 65 6c 20 28 61 6c 72 65 61 e channel (alrea
1d60: 64 79 20 63 6c 6f 73 65 64 2c 20 6f 72 0a 2b 09 dy closed, or.+.
1d70: 20 2a 20 6e 65 76 65 72 20 6f 70 65 6e 65 64 20 * never opened
1d80: 66 6f 72 20 74 68 61 74 20 64 69 72 65 63 74 69 for that directi
1d90: 6f 6e 29 2e 0a 2b 09 20 2a 2f 0a 2b 0a 2b 09 69 on)..+. */.+.+.i
1da0: 66 20 28 21 28 64 69 72 20 26 20 54 63 6c 5f 47 f (!(dir & Tcl_G
1db0: 65 74 43 68 61 6e 6e 65 6c 4d 6f 64 65 20 28 63 etChannelMode (c
1dc0: 68 61 6e 29 29 29 20 7b 0a 2b 09 20 20 20 20 54 han))) {.+. T
1dd0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 20 cl_AppendResult
1de0: 28 69 6e 74 65 72 70 2c 20 22 48 61 6c 66 2d 63 (interp, "Half-c
1df0: 6c 6f 73 65 20 6f 66 20 22 2c 20 64 69 72 4f 70 lose of ", dirOp
1e00: 74 69 6f 6e 73 5b 6f 70 74 69 6f 6e 49 6e 64 65 tions[optionInde
1e10: 78 5d 2c 0a 2b 09 09 09 20 20 20 20 20 20 22 2d x],.+... "-
1e20: 73 69 64 65 20 6e 6f 74 20 70 6f 73 73 69 62 6c side not possibl
1e30: 65 2c 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 e, not supported
1e40: 20 62 79 20 63 68 61 6e 6e 65 6c 22 2c 0a 2b 09 by channel",.+.
1e50: 09 09 20 20 20 20 20 20 4e 55 4c 4c 29 3b 0a 2b .. NULL);.+
1e60: 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f . return TCL_
1e70: 45 52 52 4f 52 3b 0a 2b 09 7d 0a 2b 0a 2b 09 2f ERROR;.+.}.+.+./
1e80: 2a 0a 2b 09 20 2a 20 53 70 65 63 69 61 6c 20 68 *.+. * Special h
1e90: 61 6e 64 6c 69 6e 67 20 69 73 20 6e 65 65 64 65 andling is neede
1ea0: 64 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 d if and only if
1eb0: 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 6d 6f 64 the channel mod
1ec0: 65 20 73 75 70 70 6f 72 74 73 0a 2b 09 20 2a 20 e supports.+. *
1ed0: 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20 64 69 more than the di
1ee0: 72 65 63 74 69 6f 6e 20 74 6f 20 63 6c 6f 73 65 rection to close
1ef0: 2e 20 42 65 63 61 75 73 65 20 69 66 20 74 68 65 . Because if the
1f00: 20 63 6c 6f 73 65 20 74 68 65 20 6c 61 73 74 0a close the last.
1f10: 2b 09 20 2a 20 64 69 72 65 63 74 69 6f 6e 20 73 +. * direction s
1f20: 75 70 70 70 6f 72 74 65 64 20 77 65 20 63 61 6e uppported we can
1f30: 20 61 6e 64 20 77 69 6c 6c 20 67 6f 20 74 68 72 and will go thr
1f40: 6f 75 67 68 20 74 68 65 20 72 65 67 75 6c 61 72 ough the regular
1f50: 0a 2b 09 20 2a 20 70 72 6f 63 65 73 73 2e 0a 2b .+. * process..+
1f60: 09 20 2a 2f 0a 2b 0a 2b 09 69 66 20 28 28 54 63 . */.+.+.if ((Tc
1f70: 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 4d 6f 64 65 l_GetChannelMode
1f80: 20 28 63 68 61 6e 29 20 26 20 28 54 43 4c 5f 43 (chan) & (TCL_C
1f90: 4c 4f 53 45 5f 52 45 41 44 7c 54 43 4c 5f 43 4c LOSE_READ|TCL_CL
1fa0: 4f 53 45 5f 57 52 49 54 45 29 29 20 21 3d 20 64 OSE_WRITE)) != d
1fb0: 69 72 29 20 7b 0a 2b 09 20 20 20 20 72 65 74 75 ir) {.+. retu
1fc0: 72 6e 20 54 63 6c 5f 43 6c 6f 73 65 45 78 20 28 rn Tcl_CloseEx (
1fd0: 69 6e 74 65 72 70 2c 20 63 68 61 6e 2c 20 64 69 interp, chan, di
1fe0: 72 29 20 21 3d 20 54 43 4c 5f 4f 4b 3b 0a 2b 09 r) != TCL_OK;.+.
1ff0: 7d 0a 2b 20 20 20 20 7d 0a 2b 0a 20 20 20 20 20 }.+ }.+.
2000: 69 66 20 28 54 63 6c 5f 55 6e 72 65 67 69 73 74 if (Tcl_Unregist
2010: 65 72 43 68 61 6e 6e 65 6c 28 69 6e 74 65 72 70 erChannel(interp
2020: 2c 20 63 68 61 6e 29 20 21 3d 20 54 43 4c 5f 4f , chan) != TCL_O
2030: 4b 29 20 7b 0a 20 09 2f 2a 0a 20 09 20 2a 20 49 K) {. ./*. . * I
2040: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65 72 f there is an er
2050: 72 6f 72 20 6d 65 73 73 61 67 65 20 61 6e 64 20 ror message and
2060: 69 74 20 65 6e 64 73 20 77 69 74 68 20 61 20 6e it ends with a n
2070: 65 77 6c 69 6e 65 2c 20 72 65 6d 6f 76 65 20 74 ewline, remove t
2080: 68 65 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 he.Index: generi
2090: 63 2f 74 63 6c 53 74 75 62 49 6e 69 74 2e 63 0a c/tclStubInit.c.
20a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
20b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
20c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
20d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
20e0: 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 ===.RCS file: /c
20f0: 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 vsroot/tcl/tcl/g
2100: 65 6e 65 72 69 63 2f 74 63 6c 53 74 75 62 49 6e eneric/tclStubIn
2110: 69 74 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 6e it.c,v.retrievin
2120: 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 36 37 g revision 1.167
2130: 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 31 36 37 .diff -u -r1.167
2140: 20 74 63 6c 53 74 75 62 49 6e 69 74 2e 63 0a 2d tclStubInit.c.-
2150: 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 53 74 -- generic/tclSt
2160: 75 62 49 6e 69 74 2e 63 09 32 32 20 4f 63 74 20 ubInit.c.22 Oct
2170: 32 30 30 38 20 32 30 3a 32 33 3a 35 39 20 2d 30 2008 20:23:59 -0
2180: 30 30 30 09 31 2e 31 36 37 0a 2b 2b 2b 20 67 65 000.1.167.+++ ge
2190: 6e 65 72 69 63 2f 74 63 6c 53 74 75 62 49 6e 69 neric/tclStubIni
21a0: 74 2e 63 09 31 20 44 65 63 20 32 30 30 38 20 31 t.c.1 Dec 2008 1
21b0: 34 3a 31 36 3a 34 33 20 2d 30 30 30 30 0a 40 40 4:16:43 -0000.@@
21c0: 20 2d 31 31 33 30 2c 36 20 2b 31 31 33 30 2c 37 -1130,6 +1130,7
21d0: 20 40 40 0a 20 20 20 20 20 54 63 6c 5f 53 65 74 @@. Tcl_Set
21e0: 45 6e 73 65 6d 62 6c 65 50 61 72 61 6d 65 74 65 EnsembleParamete
21f0: 72 4c 69 73 74 2c 20 2f 2a 20 36 30 32 20 2a 2f rList, /* 602 */
2200: 0a 20 20 20 20 20 54 63 6c 5f 47 65 74 45 6e 73 . Tcl_GetEns
2210: 65 6d 62 6c 65 50 61 72 61 6d 65 74 65 72 4c 69 embleParameterLi
2220: 73 74 2c 20 2f 2a 20 36 30 33 20 2a 2f 0a 20 20 st, /* 603 */.
2230: 20 20 20 54 63 6c 5f 50 61 72 73 65 41 72 67 73 Tcl_ParseArgs
2240: 4f 62 6a 76 2c 20 2f 2a 20 36 30 34 20 2a 2f 0a Objv, /* 604 */.
2250: 2b 20 20 20 20 54 63 6c 5f 43 6c 6f 73 65 45 78 + Tcl_CloseEx
2260: 2c 20 2f 2a 20 36 30 35 20 2a 2f 0a 20 7d 3b 0a , /* 605 */. };.
2270: 20 0a 20 2f 2a 20 21 45 4e 44 21 3a 20 44 6f 20 . /* !END!: Do
2280: 6e 6f 74 20 65 64 69 74 20 61 62 6f 76 65 20 74 not edit above t
2290: 68 69 73 20 6c 69 6e 65 2e 20 2a 2f 0a 49 6e 64 his line. */.Ind
22a0: 65 78 3a 20 75 6e 69 78 2f 74 63 6c 55 6e 69 78 ex: unix/tclUnix
22b0: 43 68 61 6e 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d Chan.c.=========
22c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
22d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
22e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
22f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 ==========.RCS f
2300: 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 ile: /cvsroot/tc
2310: 6c 2f 74 63 6c 2f 75 6e 69 78 2f 74 63 6c 55 6e l/tcl/unix/tclUn
2320: 69 78 43 68 61 6e 2e 63 2c 76 0a 72 65 74 72 69 ixChan.c,v.retri
2330: 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 eving revision 1
2340: 2e 39 36 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e .96.diff -u -r1.
2350: 39 36 20 74 63 6c 55 6e 69 78 43 68 61 6e 2e 63 96 tclUnixChan.c
2360: 0a 2d 2d 2d 20 75 6e 69 78 2f 74 63 6c 55 6e 69 .--- unix/tclUni
2370: 78 43 68 61 6e 2e 63 09 32 36 20 4f 63 74 20 32 xChan.c.26 Oct 2
2380: 30 30 38 20 31 32 3a 34 35 3a 30 34 20 2d 30 30 008 12:45:04 -00
2390: 30 30 09 31 2e 39 36 0a 2b 2b 2b 20 75 6e 69 78 00.1.96.+++ unix
23a0: 2f 74 63 6c 55 6e 69 78 43 68 61 6e 2e 63 09 31 /tclUnixChan.c.1
23b0: 20 44 65 63 20 32 30 30 38 20 31 34 3a 31 36 3a Dec 2008 14:16:
23c0: 34 33 20 2d 30 30 30 30 0a 40 40 20 2d 32 31 38 43 -0000.@@ -218
23d0: 2c 36 20 2b 32 31 38 2c 39 20 40 40 0a 20 73 74 ,6 +218,9 @@. st
23e0: 61 74 69 63 20 69 6e 74 09 09 54 63 70 42 6c 6f atic int..TcpBlo
23f0: 63 6b 4d 6f 64 65 50 72 6f 63 28 43 6c 69 65 6e ckModeProc(Clien
2400: 74 44 61 74 61 20 64 61 74 61 2c 20 69 6e 74 20 tData data, int
2410: 6d 6f 64 65 29 3b 0a 20 73 74 61 74 69 63 20 69 mode);. static i
2420: 6e 74 09 09 54 63 70 43 6c 6f 73 65 50 72 6f 63 nt..TcpCloseProc
2430: 28 43 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 74 (ClientData inst
2440: 61 6e 63 65 44 61 74 61 2c 0a 20 09 09 09 20 20 anceData,. ...
2450: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e Tcl_Interp *in
2460: 74 65 72 70 29 3b 0a 2b 73 74 61 74 69 63 20 69 terp);.+static i
2470: 6e 74 09 09 54 63 70 43 6c 6f 73 65 32 50 72 6f nt..TcpClose2Pro
2480: 63 28 43 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 c(ClientData ins
2490: 74 61 6e 63 65 44 61 74 61 2c 0a 2b 09 09 09 09 tanceData,.+....
24a0: 20 20 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 Tcl_Interp
24b0: 20 2a 69 6e 74 65 72 70 2c 0a 2b 09 09 09 09 20 *interp,.+....
24c0: 20 20 20 20 20 69 6e 74 20 66 6c 61 67 73 29 3b int flags);
24d0: 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 54 63 . static int..Tc
24e0: 70 47 65 74 48 61 6e 64 6c 65 50 72 6f 63 28 43 pGetHandleProc(C
24f0: 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 74 61 6e lientData instan
2500: 63 65 44 61 74 61 2c 0a 20 09 09 09 20 20 20 20 ceData,. ...
2510: 69 6e 74 20 64 69 72 65 63 74 69 6f 6e 2c 20 43 int direction, C
2520: 6c 69 65 6e 74 44 61 74 61 20 2a 68 61 6e 64 6c lientData *handl
2530: 65 50 74 72 29 3b 0a 20 73 74 61 74 69 63 20 69 ePtr);. static i
2540: 6e 74 09 09 54 63 70 47 65 74 4f 70 74 69 6f 6e nt..TcpGetOption
2550: 50 72 6f 63 28 43 6c 69 65 6e 74 44 61 74 61 20 Proc(ClientData
2560: 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 0a 40 40 instanceData,.@@
2570: 20 2d 33 31 38 2c 37 20 2b 33 32 31 2c 37 20 40 -318,7 +321,7 @
2580: 40 0a 20 20 20 20 20 54 63 70 47 65 74 4f 70 74 @. TcpGetOpt
2590: 69 6f 6e 50 72 6f 63 2c 09 09 2f 2a 20 47 65 74 ionProc,../* Get
25a0: 20 6f 70 74 69 6f 6e 20 70 72 6f 63 2e 20 2a 2f option proc. */
25b0: 0a 20 20 20 20 20 54 63 70 57 61 74 63 68 50 72 . TcpWatchPr
25c0: 6f 63 2c 09 09 2f 2a 20 49 6e 69 74 69 61 6c 69 oc,../* Initiali
25d0: 7a 65 20 6e 6f 74 69 66 69 65 72 2e 20 2a 2f 0a ze notifier. */.
25e0: 20 20 20 20 20 54 63 70 47 65 74 48 61 6e 64 6c TcpGetHandl
25f0: 65 50 72 6f 63 2c 09 09 2f 2a 20 47 65 74 20 4f eProc,../* Get O
2600: 53 20 68 61 6e 64 6c 65 73 20 6f 75 74 20 6f 66 S handles out of
2610: 20 63 68 61 6e 6e 65 6c 2e 20 2a 2f 0a 2d 20 20 channel. */.-
2620: 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 63 6c 6f NULL,.../* clo
2630: 73 65 32 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 se2proc. */.+
2640: 20 54 63 70 43 6c 6f 73 65 32 50 72 6f 63 2c 09 TcpClose2Proc,.
2650: 09 2f 2a 20 43 6c 6f 73 65 32 20 70 72 6f 63 2e ./* Close2 proc.
2660: 20 2a 2f 0a 20 20 20 20 20 54 63 70 42 6c 6f 63 */. TcpBloc
2670: 6b 4d 6f 64 65 50 72 6f 63 2c 09 09 2f 2a 20 53 kModeProc,../* S
2680: 65 74 20 62 6c 6f 63 6b 69 6e 67 20 6f 72 20 6e et blocking or n
2690: 6f 6e 2d 62 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 on-blocking mode
26a0: 2e 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 .*/. NULL,..
26b0: 09 2f 2a 20 66 6c 75 73 68 20 70 72 6f 63 2e 20 ./* flush proc.
26c0: 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 09 */. NULL,...
26d0: 2f 2a 20 68 61 6e 64 6c 65 72 20 70 72 6f 63 2e /* handler proc.
26e0: 20 2a 2f 0a 40 40 20 2d 32 30 31 38 2c 36 20 2b */.@@ -2018,6 +
26f0: 32 30 32 31 2c 35 37 20 40 40 0a 20 2f 2a 0a 20 2021,57 @@. /*.
2700: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *--------------
2710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2740: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a 2b 20 2a --------. *.+ *
2750: 20 54 63 70 43 6c 6f 73 65 32 50 72 6f 63 20 2d TcpClose2Proc -
2760: 2d 0a 2b 20 2a 0a 2b 20 2a 09 54 68 69 73 20 66 -.+ *.+ *.This f
2770: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 unction is calle
2780: 64 20 62 79 20 74 68 65 20 67 65 6e 65 72 69 63 d by the generic
2790: 20 49 4f 20 6c 65 76 65 6c 20 74 6f 20 70 65 72 IO level to per
27a0: 66 6f 72 6d 20 74 68 65 20 63 68 61 6e 6e 65 6c form the channel
27b0: 0a 2b 20 2a 09 74 79 70 65 20 73 70 65 63 69 66 .+ *.type specif
27c0: 69 63 20 70 61 72 74 20 6f 66 20 61 20 68 61 6c ic part of a hal
27d0: 66 2d 63 6c 6f 73 65 3a 20 6e 61 6d 65 6c 79 2c f-close: namely,
27e0: 20 61 20 73 68 75 74 64 6f 77 6e 28 29 20 6f 6e a shutdown() on
27f0: 20 61 20 73 6f 63 6b 65 74 2e 0a 2b 20 2a 0a 2b a socket..+ *.+
2800: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b 20 2a 09 * Results:.+ *.
2810: 30 20 69 66 20 73 75 63 63 65 73 73 66 75 6c 2c 0 if successful,
2820: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 65 72 the value of er
2830: 72 6e 6f 20 69 66 20 66 61 69 6c 65 64 2e 0a 2b rno if failed..+
2840: 20 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 *.+ * Side effe
2850: 63 74 73 3a 0a 2b 20 2a 09 53 68 75 74 73 20 64 cts:.+ *.Shuts d
2860: 6f 77 6e 20 6f 6e 65 20 73 69 64 65 20 6f 66 20 own one side of
2870: 74 68 65 20 73 6f 63 6b 65 74 2e 0a 2b 20 2a 0a the socket..+ *.
2880: 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d + *-------------
2890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
28a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
28b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
28c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b ---------.+ */.+
28d0: 0a 2b 73 74 61 74 69 63 20 69 6e 74 0a 2b 54 63 .+static int.+Tc
28e0: 70 43 6c 6f 73 65 32 50 72 6f 63 28 0a 2b 20 20 pClose2Proc(.+
28f0: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 ClientData ins
2900: 74 61 6e 63 65 44 61 74 61 2c 09 2f 2a 20 54 68 tanceData,./* Th
2910: 65 20 73 6f 63 6b 65 74 20 74 6f 20 63 6c 6f 73 e socket to clos
2920: 65 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 49 e. */.+ Tcl_I
2930: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 09 09 nterp *interp,..
2940: 2f 2a 20 46 6f 72 20 65 72 72 6f 72 20 72 65 70 /* For error rep
2950: 6f 72 74 69 6e 67 2e 20 2a 2f 0a 2b 20 20 20 20 orting. */.+
2960: 69 6e 74 20 66 6c 61 67 73 29 09 09 09 2f 2a 20 int flags).../*
2970: 46 6c 61 67 73 20 74 68 61 74 20 69 6e 64 69 63 Flags that indic
2980: 61 74 65 20 77 68 69 63 68 20 73 69 64 65 20 74 ate which side t
2990: 6f 20 63 6c 6f 73 65 2e 20 2a 2f 0a 2b 7b 0a 2b o close. */.+{.+
29a0: 20 20 20 20 54 63 70 53 74 61 74 65 20 2a 73 74 TcpState *st
29b0: 61 74 65 50 74 72 20 3d 20 28 54 63 70 53 74 61 atePtr = (TcpSta
29c0: 74 65 20 2a 29 20 69 6e 73 74 61 6e 63 65 44 61 te *) instanceDa
29d0: 74 61 3b 0a 2b 20 20 20 20 69 6e 74 20 65 72 72 ta;.+ int err
29e0: 6f 72 43 6f 64 65 20 3d 20 30 3b 0a 2b 20 20 20 orCode = 0;.+
29f0: 20 69 6e 74 20 73 64 3b 0a 2b 0a 2b 20 20 20 20 int sd;.+.+
2a00: 2f 2a 0a 2b 20 20 20 20 20 2a 20 53 68 75 74 64 /*.+ * Shutd
2a10: 6f 77 6e 20 74 68 65 20 4f 53 20 73 6f 63 6b 65 own the OS socke
2a20: 74 20 68 61 6e 64 6c 65 2e 0a 2b 20 20 20 20 20 t handle..+
2a30: 2a 2f 0a 2b 20 20 20 20 73 77 69 74 63 68 28 66 */.+ switch(f
2a40: 6c 61 67 73 29 0a 2b 09 7b 0a 2b 09 63 61 73 65 lags).+.{.+.case
2a50: 20 54 43 4c 5f 43 4c 4f 53 45 5f 52 45 41 44 3a TCL_CLOSE_READ:
2a60: 0a 2b 09 20 20 20 20 73 64 3d 53 48 55 54 5f 52 .+. sd=SHUT_R
2a70: 44 3b 0a 2b 09 20 20 20 20 62 72 65 61 6b 3b 0a D;.+. break;.
2a80: 2b 09 63 61 73 65 20 54 43 4c 5f 43 4c 4f 53 45 +.case TCL_CLOSE
2a90: 5f 57 52 49 54 45 3a 0a 2b 09 20 20 20 20 73 64 _WRITE:.+. sd
2aa0: 3d 53 48 55 54 5f 57 52 3b 0a 2b 09 20 20 20 20 =SHUT_WR;.+.
2ab0: 62 72 65 61 6b 3b 0a 2b 09 64 65 66 61 75 6c 74 break;.+.default
2ac0: 3a 0a 2b 09 20 20 20 20 69 66 20 28 69 6e 74 65 :.+. if (inte
2ad0: 72 70 29 20 7b 0a 2b 09 09 54 63 6c 5f 41 70 70 rp) {.+..Tcl_App
2ae0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 endResult(interp
2af0: 2c 20 22 53 6f 63 6b 65 74 20 63 6c 6f 73 65 32 , "Socket close2
2b00: 70 72 6f 63 20 63 61 6c 6c 65 64 20 62 69 64 69 proc called bidi
2b10: 72 65 63 74 69 6f 6e 61 6c 6c 79 22 2c 20 4e 55 rectionally", NU
2b20: 4c 4c 29 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 20 LL);.+. }.+.
2b30: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 return TCL_ER
2b40: 52 4f 52 3b 0a 2b 09 7d 0a 2b 20 20 20 20 69 66 ROR;.+.}.+ if
2b50: 20 28 73 68 75 74 64 6f 77 6e 28 73 74 61 74 65 (shutdown(state
2b60: 50 74 72 2d 3e 66 64 2c 73 64 29 3c 30 29 20 7b Ptr->fd,sd)<0) {
2b70: 0a 2b 09 65 72 72 6f 72 43 6f 64 65 20 3d 20 65 .+.errorCode = e
2b80: 72 72 6e 6f 3b 0a 2b 20 20 20 20 7d 0a 2b 0a 2b rrno;.+ }.+.+
2b90: 20 20 20 20 72 65 74 75 72 6e 20 65 72 72 6f 72 return error
2ba0: 43 6f 64 65 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a 0a Code;.+}.+..+/*.
2bb0: 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d + *-------------
2bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2bd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 20 20 ---------.+ *.
2c00: 2a 20 54 63 70 47 65 74 4f 70 74 69 6f 6e 50 72 * TcpGetOptionPr
2c10: 6f 63 20 2d 2d 0a 20 20 2a 0a 20 20 2a 09 43 6f oc --. *. *.Co
2c20: 6d 70 75 74 65 73 20 61 6e 20 6f 70 74 69 6f 6e mputes an option
2c30: 20 76 61 6c 75 65 20 66 6f 72 20 61 20 54 43 50 value for a TCP
2c40: 20 73 6f 63 6b 65 74 20 62 61 73 65 64 20 63 68 socket based ch
2c50: 61 6e 6e 65 6c 2c 20 6f 72 20 61 20 6c 69 73 74 annel, or a list
2c60: 20 6f 66 0a 49 6e 64 65 78 3a 20 77 69 6e 2f 74 of.Index: win/t
2c70: 63 6c 57 69 6e 53 6f 63 6b 2e 63 0a 3d 3d 3d 3d clWinSock.c.====
2c80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2c90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2ca0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2cb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ===============.
2cc0: 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f RCS file: /cvsro
2cd0: 6f 74 2f 74 63 6c 2f 74 63 6c 2f 77 69 6e 2f 74 ot/tcl/tcl/win/t
2ce0: 63 6c 57 69 6e 53 6f 63 6b 2e 63 2c 76 0a 72 65 clWinSock.c,v.re
2cf0: 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f trieving revisio
2d00: 6e 20 31 2e 36 33 0a 64 69 66 66 20 2d 75 20 2d n 1.63.diff -u -
2d10: 72 31 2e 36 33 20 74 63 6c 57 69 6e 53 6f 63 6b r1.63 tclWinSock
2d20: 2e 63 0a 2d 2d 2d 20 77 69 6e 2f 74 63 6c 57 69 .c.--- win/tclWi
2d30: 6e 53 6f 63 6b 2e 63 09 32 36 20 4f 63 74 20 32 nSock.c.26 Oct 2
2d40: 30 30 38 20 31 38 3a 34 33 3a 32 37 20 2d 30 30 008 18:43:27 -00
2d50: 30 30 09 31 2e 36 33 0a 2b 2b 2b 20 77 69 6e 2f 00.1.63.+++ win/
2d60: 74 63 6c 57 69 6e 53 6f 63 6b 2e 63 09 31 20 44 tclWinSock.c.1 D
2d70: 65 63 20 32 30 30 38 20 31 34 3a 31 36 3a 34 33 ec 2008 14:16:43
2d80: 20 2d 30 30 30 30 0a 40 40 20 2d 31 36 38 2c 36 -0000.@@ -168,6
2d90: 20 2b 31 36 38 2c 37 20 40 40 0a 20 73 74 61 74 +168,7 @@. stat
2da0: 69 63 20 54 63 6c 5f 45 76 65 6e 74 53 65 74 75 ic Tcl_EventSetu
2db0: 70 50 72 6f 63 09 53 6f 63 6b 65 74 53 65 74 75 pProc.SocketSetu
2dc0: 70 50 72 6f 63 3b 0a 20 73 74 61 74 69 63 20 54 pProc;. static T
2dd0: 63 6c 5f 44 72 69 76 65 72 42 6c 6f 63 6b 4d 6f cl_DriverBlockMo
2de0: 64 65 50 72 6f 63 09 54 63 70 42 6c 6f 63 6b 50 deProc.TcpBlockP
2df0: 72 6f 63 3b 0a 20 73 74 61 74 69 63 20 54 63 6c roc;. static Tcl
2e00: 5f 44 72 69 76 65 72 43 6c 6f 73 65 50 72 6f 63 _DriverCloseProc
2e10: 09 54 63 70 43 6c 6f 73 65 50 72 6f 63 3b 0a 2b .TcpCloseProc;.+
2e20: 73 74 61 74 69 63 20 54 63 6c 5f 44 72 69 76 65 static Tcl_Drive
2e30: 72 43 6c 6f 73 65 32 50 72 6f 63 09 54 63 70 43 rClose2Proc.TcpC
2e40: 6c 6f 73 65 32 50 72 6f 63 3b 0a 20 73 74 61 74 lose2Proc;. stat
2e50: 69 63 20 54 63 6c 5f 44 72 69 76 65 72 53 65 74 ic Tcl_DriverSet
2e60: 4f 70 74 69 6f 6e 50 72 6f 63 09 54 63 70 53 65 OptionProc.TcpSe
2e70: 74 4f 70 74 69 6f 6e 50 72 6f 63 3b 0a 20 73 74 tOptionProc;. st
2e80: 61 74 69 63 20 54 63 6c 5f 44 72 69 76 65 72 47 atic Tcl_DriverG
2e90: 65 74 4f 70 74 69 6f 6e 50 72 6f 63 09 54 63 70 etOptionProc.Tcp
2ea0: 47 65 74 4f 70 74 69 6f 6e 50 72 6f 63 3b 0a 20 GetOptionProc;.
2eb0: 73 74 61 74 69 63 20 54 63 6c 5f 44 72 69 76 65 static Tcl_Drive
2ec0: 72 49 6e 70 75 74 50 72 6f 63 09 54 63 70 49 6e rInputProc.TcpIn
2ed0: 70 75 74 50 72 6f 63 3b 0a 40 40 20 2d 31 39 31 putProc;.@@ -191
2ee0: 2c 37 20 2b 31 39 32 2c 37 20 40 40 0a 20 20 20 ,7 +192,7 @@.
2ef0: 20 20 54 63 70 47 65 74 4f 70 74 69 6f 6e 50 72 TcpGetOptionPr
2f00: 6f 63 2c 09 20 20 20 20 2f 2a 20 47 65 74 20 6f oc,. /* Get o
2f10: 70 74 69 6f 6e 20 70 72 6f 63 2e 20 2a 2f 0a 20 ption proc. */.
2f20: 20 20 20 20 54 63 70 57 61 74 63 68 50 72 6f 63 TcpWatchProc
2f30: 2c 09 20 20 20 20 2f 2a 20 53 65 74 20 75 70 20 ,. /* Set up
2f40: 6e 6f 74 69 66 69 65 72 20 74 6f 20 77 61 74 63 notifier to watc
2f50: 68 20 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e 20 h this channel.
2f60: 2a 2f 0a 20 20 20 20 20 54 63 70 47 65 74 48 61 */. TcpGetHa
2f70: 6e 64 6c 65 50 72 6f 63 2c 09 20 20 20 20 2f 2a ndleProc,. /*
2f80: 20 47 65 74 20 61 6e 20 4f 53 20 68 61 6e 64 6c Get an OS handl
2f90: 65 20 66 72 6f 6d 20 63 68 61 6e 6e 65 6c 2e 20 e from channel.
2fa0: 2a 2f 0a 2d 20 20 20 20 4e 55 4c 4c 2c 09 09 20 */.- NULL,..
2fb0: 20 20 20 2f 2a 20 63 6c 6f 73 65 32 70 72 6f 63 /* close2proc
2fc0: 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 70 43 6c 6f . */.+ TcpClo
2fd0: 73 65 32 50 72 6f 63 2c 09 20 20 20 20 2f 2a 20 se2Proc,. /*
2fe0: 43 6c 6f 73 65 32 70 72 6f 63 2e 20 2a 2f 0a 20 Close2proc. */.
2ff0: 20 20 20 20 54 63 70 42 6c 6f 63 6b 50 72 6f 63 TcpBlockProc
3000: 2c 09 20 20 20 20 2f 2a 20 53 65 74 20 73 6f 63 ,. /* Set soc
3010: 6b 65 74 20 69 6e 74 6f 20 28 6e 6f 6e 2d 29 62 ket into (non-)b
3020: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 20 2a 2f locking mode. */
3030: 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 20 20 20 . NULL,..
3040: 20 2f 2a 20 66 6c 75 73 68 20 70 72 6f 63 2e 20 /* flush proc.
3050: 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 20 */. NULL,..
3060: 20 20 20 2f 2a 20 68 61 6e 64 6c 65 72 20 70 72 /* handler pr
3070: 6f 63 2e 20 2a 2f 0a 40 40 20 2d 38 31 38 2c 36 oc. */.@@ -818,6
3080: 20 2b 38 31 39 2c 35 38 20 40 40 0a 20 2f 2a 0a +819,58 @@. /*.
3090: 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *-------------
30a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
30b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
30c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
30d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a 2b 20 ---------. *.+
30e0: 2a 20 54 63 70 43 6c 6f 73 65 32 50 72 6f 63 20 * TcpClose2Proc
30f0: 2d 2d 0a 2b 20 2a 0a 2b 20 2a 09 54 68 69 73 20 --.+ *.+ *.This
3100: 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c function is call
3110: 65 64 20 62 79 20 74 68 65 20 67 65 6e 65 72 69 ed by the generi
3120: 63 20 49 4f 20 6c 65 76 65 6c 20 74 6f 20 70 65 c IO level to pe
3130: 72 66 6f 72 6d 20 74 68 65 20 63 68 61 6e 6e 65 rform the channe
3140: 6c 0a 2b 20 2a 09 74 79 70 65 20 73 70 65 63 69 l.+ *.type speci
3150: 66 69 63 20 70 61 72 74 20 6f 66 20 61 20 68 61 fic part of a ha
3160: 6c 66 2d 63 6c 6f 73 65 3a 20 6e 61 6d 65 6c 79 lf-close: namely
3170: 2c 20 61 20 73 68 75 74 64 6f 77 6e 28 29 20 6f , a shutdown() o
3180: 6e 20 61 20 73 6f 63 6b 65 74 2e 0a 2b 20 2a 0a n a socket..+ *.
3190: 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b 20 2a + * Results:.+ *
31a0: 09 30 20 69 66 20 73 75 63 63 65 73 73 66 75 6c .0 if successful
31b0: 2c 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 65 , the value of e
31c0: 72 72 6e 6f 20 69 66 20 66 61 69 6c 65 64 2e 0a rrno if failed..
31d0: 2b 20 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 + *.+ * Side eff
31e0: 65 63 74 73 3a 0a 2b 20 2a 09 53 68 75 74 73 20 ects:.+ *.Shuts
31f0: 64 6f 77 6e 20 6f 6e 65 20 73 69 64 65 20 6f 66 down one side of
3200: 20 74 68 65 20 73 6f 63 6b 65 74 2e 0a 2b 20 2a the socket..+ *
3210: 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .+ *------------
3220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a ----------.+ */.
3260: 2b 0a 2b 73 74 61 74 69 63 20 69 6e 74 0a 2b 54 +.+static int.+T
3270: 63 70 43 6c 6f 73 65 32 50 72 6f 63 28 0a 2b 20 cpClose2Proc(.+
3280: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 6e ClientData in
3290: 73 74 61 6e 63 65 44 61 74 61 2c 09 2f 2a 20 54 stanceData,./* T
32a0: 68 65 20 73 6f 63 6b 65 74 20 74 6f 20 63 6c 6f he socket to clo
32b0: 73 65 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f se. */.+ Tcl_
32c0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 09 Interp *interp,.
32d0: 09 2f 2a 20 46 6f 72 20 65 72 72 6f 72 20 72 65 ./* For error re
32e0: 70 6f 72 74 69 6e 67 2e 20 2a 2f 0a 2b 20 20 20 porting. */.+
32f0: 20 69 6e 74 20 66 6c 61 67 73 29 09 09 09 2f 2a int flags).../*
3300: 20 46 6c 61 67 73 20 74 68 61 74 20 69 6e 64 69 Flags that indi
3310: 63 61 74 65 20 77 68 69 63 68 20 73 69 64 65 20 cate which side
3320: 74 6f 20 63 6c 6f 73 65 2e 20 2a 2f 0a 2b 7b 0a to close. */.+{.
3330: 2b 20 20 20 20 53 6f 63 6b 65 74 49 6e 66 6f 20 + SocketInfo
3340: 2a 69 6e 66 6f 50 74 72 20 3d 20 28 53 6f 63 6b *infoPtr = (Sock
3350: 65 74 49 6e 66 6f 20 2a 29 20 69 6e 73 74 61 6e etInfo *) instan
3360: 63 65 44 61 74 61 3b 0a 2b 20 20 20 20 69 6e 74 ceData;.+ int
3370: 20 65 72 72 6f 72 43 6f 64 65 20 3d 20 30 3b 0a errorCode = 0;.
3380: 2b 20 20 20 20 69 6e 74 20 73 64 3b 0a 2b 0a 2b + int sd;.+.+
3390: 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a 20 53 /*.+ * S
33a0: 68 75 74 64 6f 77 6e 20 74 68 65 20 4f 53 20 73 hutdown the OS s
33b0: 6f 63 6b 65 74 20 68 61 6e 64 6c 65 2e 0a 2b 20 ocket handle..+
33c0: 20 20 20 20 2a 2f 0a 2b 20 20 20 20 73 77 69 74 */.+ swit
33d0: 63 68 28 66 6c 61 67 73 29 0a 2b 09 7b 0a 2b 09 ch(flags).+.{.+.
33e0: 63 61 73 65 20 54 43 4c 5f 43 4c 4f 53 45 5f 52 case TCL_CLOSE_R
33f0: 45 41 44 3a 0a 2b 09 20 20 20 20 73 64 3d 53 44 EAD:.+. sd=SD
3400: 5f 52 45 43 45 49 56 45 3b 0a 2b 09 20 20 20 20 _RECEIVE;.+.
3410: 62 72 65 61 6b 3b 0a 2b 09 63 61 73 65 20 54 43 break;.+.case TC
3420: 4c 5f 43 4c 4f 53 45 5f 57 52 49 54 45 3a 0a 2b L_CLOSE_WRITE:.+
3430: 09 20 20 20 20 73 64 3d 53 44 5f 53 45 4e 44 3b . sd=SD_SEND;
3440: 0a 2b 09 20 20 20 20 62 72 65 61 6b 3b 0a 2b 09 .+. break;.+.
3450: 64 65 66 61 75 6c 74 3a 0a 2b 09 20 20 20 20 69 default:.+. i
3460: 66 20 28 69 6e 74 65 72 70 29 20 7b 0a 2b 09 09 f (interp) {.+..
3470: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 Tcl_AppendResult
3480: 28 69 6e 74 65 72 70 2c 20 22 53 6f 63 6b 65 74 (interp, "Socket
3490: 20 63 6c 6f 73 65 32 70 72 6f 63 20 63 61 6c 6c close2proc call
34a0: 65 64 20 62 69 64 69 72 65 63 74 69 6f 6e 61 6c ed bidirectional
34b0: 6c 79 22 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 20 20 ly", NULL);.+.
34c0: 20 20 7d 0a 2b 09 20 20 20 20 72 65 74 75 72 6e }.+. return
34d0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 7d 0a TCL_ERROR;.+.}.
34e0: 2b 20 20 20 20 69 66 20 28 73 68 75 74 64 6f 77 + if (shutdow
34f0: 6e 28 69 6e 66 6f 50 74 72 2d 3e 73 6f 63 6b 65 n(infoPtr->socke
3500: 74 2c 73 64 29 20 3d 3d 20 53 4f 43 4b 45 54 5f t,sd) == SOCKET_
3510: 45 52 52 4f 52 29 20 7b 0a 2b 09 54 63 6c 57 69 ERROR) {.+.TclWi
3520: 6e 43 6f 6e 76 65 72 74 57 53 41 45 72 72 6f 72 nConvertWSAError
3530: 28 28 44 57 4f 52 44 29 20 57 53 41 47 65 74 4c ((DWORD) WSAGetL
3540: 61 73 74 45 72 72 6f 72 28 29 29 3b 0a 2b 09 65 astError());.+.e
3550: 72 72 6f 72 43 6f 64 65 20 3d 20 54 63 6c 5f 47 rrorCode = Tcl_G
3560: 65 74 45 72 72 6e 6f 28 29 3b 0a 2b 20 20 20 20 etErrno();.+
3570: 7d 0a 2b 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 }.+.+ return
3580: 65 72 72 6f 72 43 6f 64 65 3b 0a 2b 7d 0a 2b 0c errorCode;.+}.+.
3590: 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d .+/*.+ *--------
35a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
35b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
35c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
35d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b --------------.+
35e0: 20 2a 0a 20 20 2a 20 4e 65 77 53 6f 63 6b 65 74 *. * NewSocket
35f0: 49 6e 66 6f 20 2d 2d 0a 20 20 2a 0a 20 20 2a 09 Info --. *. *.
3600: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 61 6c This function al
3610: 6c 6f 63 61 74 65 73 20 61 6e 64 20 69 6e 69 74 locates and init
3620: 69 61 6c 69 7a 65 73 20 61 20 6e 65 77 20 53 6f ializes a new So
3630: 63 6b 65 74 49 6e 66 6f 20 73 74 72 75 63 74 75 cketInfo structu
3640: 72 65 2e 0a re..