Tcl Source Code

Check-in [cbf7dc0a31]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:[Bug 510001]: TclSockMinimumBuffers needs plat imp
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | core-8-4-branch
Files: files | file ages | folders
SHA1: cbf7dc0a3171e2aa469848230bb31f20409d4e26
User & Date: jan.nijtmans 2012-04-04 08:36:18
Context
2012-04-04
14:50
implement TclpGetPid for Cygwin check-in: dcc7f6a5b4 user: jan.nijtmans tags: bug-3508771
14:44
Quick workaround for busted branch tip. check-in: 2372607d3e user: dgp tags: core-8-4-branch
09:05
[Bug 510001]: TclSockMinimumBuffers needs plat imp check-in: 2725f75513 user: jan.nijtmans tags: core-8-5-branch
08:36
[Bug 510001]: TclSockMinimumBuffers needs plat imp check-in: cbf7dc0a31 user: jan.nijtmans tags: core-8-4-branch
2012-04-03
14:05
clean-up tcl.decls the same way as tclInt.decls check-in: 90efd4b49a user: jan.nijtmans tags: core-8-4-branch
2012-03-29
12:13
better solution for bug-510001 it fills a correctly working stub entry for Win64 Closed-Leaf check-in: 02368db2ae user: jan.nijtmans tags: bug-510001
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to ChangeLog.









1
2
3
4
5
6
7








2012-04-03  Jan Nijtmans  <[email protected]>

	* tools/genStubs.tcl:        Let genStubs.tcl do the void -> VOID and
	const -> CONST translations, so we cannot forget it in the *.decls file
	* generic/tcl.decls:         VOID -> void and CONST -> const, so depend
	* generic/tclInt.decls:      on genStubs.tcl to generate the correct form
	form in the *Decls.h file. This brings tclInt.decls in the same form as
>
>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2012-04-04  Jan Nijtmans  <[email protected]>

	* win/tclWinSock.c:     [Bug 510001]: TclSockMinimumBuffers needs plat imp
	* generic/tclIOSock.c:
	* generic/tclInt.decls:
	* generic/tclIntDecls.h:
	* generic/ttclStubInit.c:

2012-04-03  Jan Nijtmans  <[email protected]>

	* tools/genStubs.tcl:        Let genStubs.tcl do the void -> VOID and
	const -> CONST translations, so we cannot forget it in the *.decls file
	* generic/tcl.decls:         VOID -> void and CONST -> const, so depend
	* generic/tclInt.decls:      on genStubs.tcl to generate the correct form
	form in the *Decls.h file. This brings tclInt.decls in the same form as

Changes to generic/tclIOSock.c.

79
80
81
82
83
84
85





86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
 *
 * Side effects:
 *	Sets SO_SNDBUF and SO_RCVBUF sizes.
 *
 *----------------------------------------------------------------------
 */






int
TclSockMinimumBuffers(sock, size)
    int sock;			/* Socket file descriptor */
    int size;			/* Minimum buffer size */
{
    int current;
    socklen_t len;

    len = sizeof(int);
    getsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char *)&current, &len);
    if (current < size) {
	len = sizeof(int);
	setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char *)&size, len);
    }
    len = sizeof(int);
    getsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)&current, &len);
    if (current < size) {
	len = sizeof(int);
	setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)&size, len);
    }
    return TCL_OK;
}







>
>
>
>
>


|






|


|


|


|



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
 *
 * Side effects:
 *	Sets SO_SNDBUF and SO_RCVBUF sizes.
 *
 *----------------------------------------------------------------------
 */

#undef TclSockMinimumBuffers
#ifndef _WIN32
#   define SOCKET int
#endif

int
TclSockMinimumBuffers(sock, size)
    void *sock;			/* Socket file descriptor */
    int size;			/* Minimum buffer size */
{
    int current;
    socklen_t len;

    len = sizeof(int);
    getsockopt((SOCKET)sock, SOL_SOCKET, SO_SNDBUF, (char *)&current, &len);
    if (current < size) {
	len = sizeof(int);
	setsockopt((SOCKET)sock, SOL_SOCKET, SO_SNDBUF, (char *)&size, len);
    }
    len = sizeof(int);
    getsockopt((SOCKET)sock, SOL_SOCKET, SO_RCVBUF, (char *)&current, &len);
    if (current < size) {
	len = sizeof(int);
	setsockopt((SOCKET)sock, SOL_SOCKET, SO_RCVBUF, (char *)&size, len);
    }
    return TCL_OK;
}

Changes to generic/tclInt.decls.

404
405
406
407
408
409
410



411
412
413
414
415
416
417
418
    void TclSetupEnv(Tcl_Interp *interp)
}
declare 103 {
    int TclSockGetPort(Tcl_Interp *interp, char *str, char *proto,
	    int *portPtr)
}
declare 104 {unix win} {



    int TclSockMinimumBuffers(int sock, int size)
}
# Replaced by Tcl_FSStat in 8.4:
#declare 105 {
#    int TclStat(const char *path, Tcl_StatBuf *buf)
#}
declare 106 {
    int TclStatDeleteProc(TclStatProc_ *proc)







>
>
>
|







404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
    void TclSetupEnv(Tcl_Interp *interp)
}
declare 103 {
    int TclSockGetPort(Tcl_Interp *interp, char *str, char *proto,
	    int *portPtr)
}
declare 104 {unix win} {
    int TclSockMinimumBuffersOld(int sock, int size)
}
declare 110 {unix win} {
    int TclSockMinimumBuffers(void *sock, int size)
}
# Replaced by Tcl_FSStat in 8.4:
#declare 105 {
#    int TclStat(const char *path, Tcl_StatBuf *buf)
#}
declare 106 {
    int TclStatDeleteProc(TclStatProc_ *proc)

Changes to generic/tclIntDecls.h.

287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310

311








312
313
314
315
316
317
318
/* 102 */
EXTERN void		TclSetupEnv _ANSI_ARGS_((Tcl_Interp *interp));
/* 103 */
EXTERN int		TclSockGetPort _ANSI_ARGS_((Tcl_Interp *interp,
				char *str, char *proto, int *portPtr));
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
/* 104 */
EXTERN int		TclSockMinimumBuffers _ANSI_ARGS_((int sock,
				int size));
#endif /* UNIX */
#ifdef __WIN32__
/* 104 */
EXTERN int		TclSockMinimumBuffers _ANSI_ARGS_((int sock,
				int size));
#endif /* __WIN32__ */
/* Slot 105 is reserved */
/* 106 */
EXTERN int		TclStatDeleteProc _ANSI_ARGS_((TclStatProc_ *proc));
/* 107 */
EXTERN int		TclStatInsertProc _ANSI_ARGS_((TclStatProc_ *proc));
/* 108 */
EXTERN void		TclTeardownNamespace _ANSI_ARGS_((Namespace *nsPtr));
/* 109 */
EXTERN int		TclUpdateReturnInfo _ANSI_ARGS_((Interp *iPtr));

/* Slot 110 is reserved */








/* 111 */
EXTERN void		Tcl_AddInterpResolvers _ANSI_ARGS_((
				Tcl_Interp *interp, CONST char *name,
				Tcl_ResolveCmdProc *cmdProc,
				Tcl_ResolveVarProc *varProc,
				Tcl_ResolveCompiledVarProc *compiledVarProc));
/* 112 */







|




|











>
|
>
>
>
>
>
>
>
>







287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
/* 102 */
EXTERN void		TclSetupEnv _ANSI_ARGS_((Tcl_Interp *interp));
/* 103 */
EXTERN int		TclSockGetPort _ANSI_ARGS_((Tcl_Interp *interp,
				char *str, char *proto, int *portPtr));
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
/* 104 */
EXTERN int		TclSockMinimumBuffersOld _ANSI_ARGS_((int sock,
				int size));
#endif /* UNIX */
#ifdef __WIN32__
/* 104 */
EXTERN int		TclSockMinimumBuffersOld _ANSI_ARGS_((int sock,
				int size));
#endif /* __WIN32__ */
/* Slot 105 is reserved */
/* 106 */
EXTERN int		TclStatDeleteProc _ANSI_ARGS_((TclStatProc_ *proc));
/* 107 */
EXTERN int		TclStatInsertProc _ANSI_ARGS_((TclStatProc_ *proc));
/* 108 */
EXTERN void		TclTeardownNamespace _ANSI_ARGS_((Namespace *nsPtr));
/* 109 */
EXTERN int		TclUpdateReturnInfo _ANSI_ARGS_((Interp *iPtr));
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
/* 110 */
EXTERN int		TclSockMinimumBuffers _ANSI_ARGS_((VOID *sock,
				int size));
#endif /* UNIX */
#ifdef __WIN32__
/* 110 */
EXTERN int		TclSockMinimumBuffers _ANSI_ARGS_((VOID *sock,
				int size));
#endif /* __WIN32__ */
/* 111 */
EXTERN void		Tcl_AddInterpResolvers _ANSI_ARGS_((
				Tcl_Interp *interp, CONST char *name,
				Tcl_ResolveCmdProc *cmdProc,
				Tcl_ResolveVarProc *varProc,
				Tcl_ResolveCompiledVarProc *compiledVarProc));
/* 112 */
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668







669

670
671
672
673
674
675
676
    int (*tclServiceIdle) _ANSI_ARGS_((void)); /* 98 */
    VOID *reserved99;
    VOID *reserved100;
    char * (*tclSetPreInitScript) _ANSI_ARGS_((char *string)); /* 101 */
    void (*tclSetupEnv) _ANSI_ARGS_((Tcl_Interp *interp)); /* 102 */
    int (*tclSockGetPort) _ANSI_ARGS_((Tcl_Interp *interp, char *str, char *proto, int *portPtr)); /* 103 */
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
    int (*tclSockMinimumBuffers) _ANSI_ARGS_((int sock, int size)); /* 104 */
#endif /* UNIX */
#ifdef __WIN32__
    int (*tclSockMinimumBuffers) _ANSI_ARGS_((int sock, int size)); /* 104 */
#endif /* __WIN32__ */
#ifdef MAC_TCL
    VOID *reserved104;
#endif /* MAC_TCL */
    VOID *reserved105;
    int (*tclStatDeleteProc) _ANSI_ARGS_((TclStatProc_ *proc)); /* 106 */
    int (*tclStatInsertProc) _ANSI_ARGS_((TclStatProc_ *proc)); /* 107 */
    void (*tclTeardownNamespace) _ANSI_ARGS_((Namespace *nsPtr)); /* 108 */
    int (*tclUpdateReturnInfo) _ANSI_ARGS_((Interp *iPtr)); /* 109 */







    VOID *reserved110;

    void (*tcl_AddInterpResolvers) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *name, Tcl_ResolveCmdProc *cmdProc, Tcl_ResolveVarProc *varProc, Tcl_ResolveCompiledVarProc *compiledVarProc)); /* 111 */
    int (*tcl_AppendExportList) _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Namespace *nsPtr, Tcl_Obj *objPtr)); /* 112 */
    Tcl_Namespace * (*tcl_CreateNamespace) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *name, ClientData clientData, Tcl_NamespaceDeleteProc *deleteProc)); /* 113 */
    void (*tcl_DeleteNamespace) _ANSI_ARGS_((Tcl_Namespace *nsPtr)); /* 114 */
    int (*tcl_Export) _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Namespace *nsPtr, CONST char *pattern, int resetListFirst)); /* 115 */
    Tcl_Command (*tcl_FindCommand) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *name, Tcl_Namespace *contextNsPtr, int flags)); /* 116 */
    Tcl_Namespace * (*tcl_FindNamespace) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *name, Tcl_Namespace *contextNsPtr, int flags)); /* 117 */







|


|









>
>
>
>
>
>
>

>







658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
    int (*tclServiceIdle) _ANSI_ARGS_((void)); /* 98 */
    VOID *reserved99;
    VOID *reserved100;
    char * (*tclSetPreInitScript) _ANSI_ARGS_((char *string)); /* 101 */
    void (*tclSetupEnv) _ANSI_ARGS_((Tcl_Interp *interp)); /* 102 */
    int (*tclSockGetPort) _ANSI_ARGS_((Tcl_Interp *interp, char *str, char *proto, int *portPtr)); /* 103 */
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
    int (*tclSockMinimumBuffersOld) _ANSI_ARGS_((int sock, int size)); /* 104 */
#endif /* UNIX */
#ifdef __WIN32__
    int (*tclSockMinimumBuffersOld) _ANSI_ARGS_((int sock, int size)); /* 104 */
#endif /* __WIN32__ */
#ifdef MAC_TCL
    VOID *reserved104;
#endif /* MAC_TCL */
    VOID *reserved105;
    int (*tclStatDeleteProc) _ANSI_ARGS_((TclStatProc_ *proc)); /* 106 */
    int (*tclStatInsertProc) _ANSI_ARGS_((TclStatProc_ *proc)); /* 107 */
    void (*tclTeardownNamespace) _ANSI_ARGS_((Namespace *nsPtr)); /* 108 */
    int (*tclUpdateReturnInfo) _ANSI_ARGS_((Interp *iPtr)); /* 109 */
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
    int (*tclSockMinimumBuffers) _ANSI_ARGS_((VOID *sock, int size)); /* 110 */
#endif /* UNIX */
#ifdef __WIN32__
    int (*tclSockMinimumBuffers) _ANSI_ARGS_((VOID *sock, int size)); /* 110 */
#endif /* __WIN32__ */
#ifdef MAC_TCL
    VOID *reserved110;
#endif /* MAC_TCL */
    void (*tcl_AddInterpResolvers) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *name, Tcl_ResolveCmdProc *cmdProc, Tcl_ResolveVarProc *varProc, Tcl_ResolveCompiledVarProc *compiledVarProc)); /* 111 */
    int (*tcl_AppendExportList) _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Namespace *nsPtr, Tcl_Obj *objPtr)); /* 112 */
    Tcl_Namespace * (*tcl_CreateNamespace) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *name, ClientData clientData, Tcl_NamespaceDeleteProc *deleteProc)); /* 113 */
    void (*tcl_DeleteNamespace) _ANSI_ARGS_((Tcl_Namespace *nsPtr)); /* 114 */
    int (*tcl_Export) _ANSI_ARGS_((Tcl_Interp *interp, Tcl_Namespace *nsPtr, CONST char *pattern, int resetListFirst)); /* 115 */
    Tcl_Command (*tcl_FindCommand) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *name, Tcl_Namespace *contextNsPtr, int flags)); /* 116 */
    Tcl_Namespace * (*tcl_FindNamespace) _ANSI_ARGS_((Tcl_Interp *interp, CONST char *name, Tcl_Namespace *contextNsPtr, int flags)); /* 117 */
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133





1134






1135
1136
1137
1138
1139
1140
1141
	(tclIntStubsPtr->tclSetupEnv) /* 102 */
#endif
#ifndef TclSockGetPort
#define TclSockGetPort \
	(tclIntStubsPtr->tclSockGetPort) /* 103 */
#endif
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
#ifndef TclSockMinimumBuffers
#define TclSockMinimumBuffers \
	(tclIntStubsPtr->tclSockMinimumBuffers) /* 104 */
#endif
#endif /* UNIX */
#ifdef __WIN32__
#ifndef TclSockMinimumBuffers
#define TclSockMinimumBuffers \
	(tclIntStubsPtr->tclSockMinimumBuffers) /* 104 */
#endif
#endif /* __WIN32__ */
/* Slot 105 is reserved */
#ifndef TclStatDeleteProc
#define TclStatDeleteProc \
	(tclIntStubsPtr->tclStatDeleteProc) /* 106 */
#endif
#ifndef TclStatInsertProc
#define TclStatInsertProc \
	(tclIntStubsPtr->tclStatInsertProc) /* 107 */
#endif
#ifndef TclTeardownNamespace
#define TclTeardownNamespace \
	(tclIntStubsPtr->tclTeardownNamespace) /* 108 */
#endif
#ifndef TclUpdateReturnInfo
#define TclUpdateReturnInfo \
	(tclIntStubsPtr->tclUpdateReturnInfo) /* 109 */
#endif





/* Slot 110 is reserved */






#ifndef Tcl_AddInterpResolvers
#define Tcl_AddInterpResolvers \
	(tclIntStubsPtr->tcl_AddInterpResolvers) /* 111 */
#endif
#ifndef Tcl_AppendExportList
#define Tcl_AppendExportList \
	(tclIntStubsPtr->tcl_AppendExportList) /* 112 */







|
|
|



|
|
|



















>
>
>
>
>
|
>
>
>
>
>
>







1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
	(tclIntStubsPtr->tclSetupEnv) /* 102 */
#endif
#ifndef TclSockGetPort
#define TclSockGetPort \
	(tclIntStubsPtr->tclSockGetPort) /* 103 */
#endif
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
#ifndef TclSockMinimumBuffersOld
#define TclSockMinimumBuffersOld \
	(tclIntStubsPtr->tclSockMinimumBuffersOld) /* 104 */
#endif
#endif /* UNIX */
#ifdef __WIN32__
#ifndef TclSockMinimumBuffersOld
#define TclSockMinimumBuffersOld \
	(tclIntStubsPtr->tclSockMinimumBuffersOld) /* 104 */
#endif
#endif /* __WIN32__ */
/* Slot 105 is reserved */
#ifndef TclStatDeleteProc
#define TclStatDeleteProc \
	(tclIntStubsPtr->tclStatDeleteProc) /* 106 */
#endif
#ifndef TclStatInsertProc
#define TclStatInsertProc \
	(tclIntStubsPtr->tclStatInsertProc) /* 107 */
#endif
#ifndef TclTeardownNamespace
#define TclTeardownNamespace \
	(tclIntStubsPtr->tclTeardownNamespace) /* 108 */
#endif
#ifndef TclUpdateReturnInfo
#define TclUpdateReturnInfo \
	(tclIntStubsPtr->tclUpdateReturnInfo) /* 109 */
#endif
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
#ifndef TclSockMinimumBuffers
#define TclSockMinimumBuffers \
	(tclIntStubsPtr->tclSockMinimumBuffers) /* 110 */
#endif
#endif /* UNIX */
#ifdef __WIN32__
#ifndef TclSockMinimumBuffers
#define TclSockMinimumBuffers \
	(tclIntStubsPtr->tclSockMinimumBuffers) /* 110 */
#endif
#endif /* __WIN32__ */
#ifndef Tcl_AddInterpResolvers
#define Tcl_AddInterpResolvers \
	(tclIntStubsPtr->tcl_AddInterpResolvers) /* 111 */
#endif
#ifndef Tcl_AppendExportList
#define Tcl_AppendExportList \
	(tclIntStubsPtr->tcl_AppendExportList) /* 112 */
1401
1402
1403
1404
1405
1406
1407
1408






1409
#define TclMatchIsTrivial \
	(tclIntStubsPtr->tclMatchIsTrivial) /* 199 */
#endif

#endif /* defined(USE_TCL_STUBS) && !defined(USE_TCL_STUB_PROCS) */

/* !END!: Do not edit above this line. */







#endif /* _TCLINTDECLS */








>
>
>
>
>
>

1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
#define TclMatchIsTrivial \
	(tclIntStubsPtr->tclMatchIsTrivial) /* 199 */
#endif

#endif /* defined(USE_TCL_STUBS) && !defined(USE_TCL_STUB_PROCS) */

/* !END!: Do not edit above this line. */

#if !defined(_WIN64)
/* See bug 510001: TclSockMinimumBuffers needs plat imp */
#   undef TclSockMinimumBuffers
#   define TclSockMinimumBuffers(a,b) TclSockMinimumBuffersOld((int)(a),b)
#endif

#endif /* _TCLINTDECLS */

Changes to generic/tclStubInit.c.

50
51
52
53
54
55
56












57
58
59
60
61
62
63
    NULL,
#endif
    NULL,
    NULL,
    NULL,
    NULL
};













#ifdef __CYGWIN__

/* Trick, so we don't have to include <windows.h> here, which
 * - b.t.w. - lacks this function anyway */
#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 0x00000004
int __stdcall GetModuleHandleExW(unsigned int, const char *, void *);







>
>
>
>
>
>
>
>
>
>
>
>







50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
    NULL,
#endif
    NULL,
    NULL,
    NULL,
    NULL
};

/* See bug 510001: TclSockMinimumBuffers needs plat imp */
#ifdef _WIN64
#   define TclSockMinimumBuffersOld 0
#else
int TclSockMinimumBuffersOld(sock, size)
    int sock;
    int size;
{
    return TclSockMinimumBuffers((void *) (size_t) sock, size);
}
#endif

#ifdef __CYGWIN__

/* Trick, so we don't have to include <windows.h> here, which
 * - b.t.w. - lacks this function anyway */
#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 0x00000004
int __stdcall GetModuleHandleExW(unsigned int, const char *, void *);
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332







333

334
335
336
337
338
339
340
    TclServiceIdle, /* 98 */
    NULL, /* 99 */
    NULL, /* 100 */
    TclSetPreInitScript, /* 101 */
    TclSetupEnv, /* 102 */
    TclSockGetPort, /* 103 */
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
    TclSockMinimumBuffers, /* 104 */
#endif /* UNIX */
#ifdef __WIN32__
    TclSockMinimumBuffers, /* 104 */
#endif /* __WIN32__ */
#ifdef MAC_TCL
    NULL, /* 104 */
#endif /* MAC_TCL */
    NULL, /* 105 */
    TclStatDeleteProc, /* 106 */
    TclStatInsertProc, /* 107 */
    TclTeardownNamespace, /* 108 */
    TclUpdateReturnInfo, /* 109 */







    NULL, /* 110 */

    Tcl_AddInterpResolvers, /* 111 */
    Tcl_AppendExportList, /* 112 */
    Tcl_CreateNamespace, /* 113 */
    Tcl_DeleteNamespace, /* 114 */
    Tcl_Export, /* 115 */
    Tcl_FindCommand, /* 116 */
    Tcl_FindNamespace, /* 117 */







|


|









>
>
>
>
>
>
>

>







325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
    TclServiceIdle, /* 98 */
    NULL, /* 99 */
    NULL, /* 100 */
    TclSetPreInitScript, /* 101 */
    TclSetupEnv, /* 102 */
    TclSockGetPort, /* 103 */
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
    TclSockMinimumBuffersOld, /* 104 */
#endif /* UNIX */
#ifdef __WIN32__
    TclSockMinimumBuffersOld, /* 104 */
#endif /* __WIN32__ */
#ifdef MAC_TCL
    NULL, /* 104 */
#endif /* MAC_TCL */
    NULL, /* 105 */
    TclStatDeleteProc, /* 106 */
    TclStatInsertProc, /* 107 */
    TclTeardownNamespace, /* 108 */
    TclUpdateReturnInfo, /* 109 */
#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */
    TclSockMinimumBuffers, /* 110 */
#endif /* UNIX */
#ifdef __WIN32__
    TclSockMinimumBuffers, /* 110 */
#endif /* __WIN32__ */
#ifdef MAC_TCL
    NULL, /* 110 */
#endif /* MAC_TCL */
    Tcl_AddInterpResolvers, /* 111 */
    Tcl_AppendExportList, /* 112 */
    Tcl_CreateNamespace, /* 113 */
    Tcl_DeleteNamespace, /* 114 */
    Tcl_Export, /* 115 */
    Tcl_FindCommand, /* 116 */
    Tcl_FindNamespace, /* 117 */

Changes to win/tclWinSock.c.

1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166

    SetHandleInformation( (HANDLE) sock, HANDLE_FLAG_INHERIT, 0 );
	
    /*
     * Set kernel space buffering
     */

    TclSockMinimumBuffers((int) sock, TCP_BUFFER_SIZE);

    if (server) {
	/*
	 * Bind to the specified port.  Note that we must not call setsockopt
	 * with SO_REUSEADDR because Microsoft allows addresses to be reused
	 * even if they are still in use.
         *







|







1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166

    SetHandleInformation( (HANDLE) sock, HANDLE_FLAG_INHERIT, 0 );
	
    /*
     * Set kernel space buffering
     */

    TclSockMinimumBuffers((void *)sock, TCP_BUFFER_SIZE);

    if (server) {
	/*
	 * Bind to the specified port.  Note that we must not call setsockopt
	 * with SO_REUSEADDR because Microsoft allows addresses to be reused
	 * even if they are still in use.
         *
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527

    tsdPtr = (ThreadSpecificData *)TclThreadDataKeyGet(&dataKey);

    /*
     * Set kernel space buffering and non-blocking.
     */

    TclSockMinimumBuffers((int) sock, TCP_BUFFER_SIZE);

    infoPtr = NewSocketInfo((SOCKET) sock);

    /*
     * Start watching for read/write events on the socket.
     */








|







1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527

    tsdPtr = (ThreadSpecificData *)TclThreadDataKeyGet(&dataKey);

    /*
     * Set kernel space buffering and non-blocking.
     */

    TclSockMinimumBuffers(sock, TCP_BUFFER_SIZE);

    infoPtr = NewSocketInfo((SOCKET) sock);

    /*
     * Start watching for read/write events on the socket.
     */

2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
 *	As defined for each function.
 *
 *----------------------------------------------------------------------
 */

int
TclWinGetSockOpt(SOCKET s, int level, int optname, char * optval,
	int FAR *optlen)
{
    /*
     * Check that WinSock is initialized; do not call it if not, to
     * prevent system crashes. This can happen at exit time if the exit
     * handler for WinSock ran before other exit handlers that want to
     * use sockets.
     */







|







2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
 *	As defined for each function.
 *
 *----------------------------------------------------------------------
 */

int
TclWinGetSockOpt(SOCKET s, int level, int optname, char * optval,
	int *optlen)
{
    /*
     * Check that WinSock is initialized; do not call it if not, to
     * prevent system crashes. This can happen at exit time if the exit
     * handler for WinSock ran before other exit handlers that want to
     * use sockets.
     */