1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/*
* tclWinSock.c --
*
* This file contains Windows-specific socket related code.
*
* Copyright (c) 1995-1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclWinSock.c,v 1.31 2002/11/27 05:29:46 davygrvy Exp $
*/
#include "tclWinInt.h"
/*
* Make sure to remove the redirection defines set in tclWinPort.h
* that is in use in other sections of the core, except for us.
|
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/*
* tclWinSock.c --
*
* This file contains Windows-specific socket related code.
*
* Copyright (c) 1995-1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tclWinSock.c,v 1.32 2002/11/27 18:37:28 davygrvy Exp $
*/
#include "tclWinInt.h"
/*
* Make sure to remove the redirection defines set in tclWinPort.h
* that is in use in other sections of the core, except for us.
|
| ︙ | | | ︙ | |
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
LPFN_IOCTLSOCKET ioctlsocket;
LPFN_LISTEN listen;
LPFN_NTOHS ntohs;
LPFN_RECV recv;
LPFN_SELECT select;
LPFN_SEND send;
LPFN_SETSOCKOPT setsockopt;
LPFN_SHUTDOWN shutdown;
LPFN_SOCKET socket;
LPFN_WSAASYNCSELECT WSAAsyncSelect;
LPFN_WSACLEANUP WSACleanup;
LPFN_WSAGETLASTERROR WSAGetLastError;
LPFN_WSASTARTUP WSAStartup;
} winSock;
|
<
|
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
LPFN_IOCTLSOCKET ioctlsocket;
LPFN_LISTEN listen;
LPFN_NTOHS ntohs;
LPFN_RECV recv;
LPFN_SELECT select;
LPFN_SEND send;
LPFN_SETSOCKOPT setsockopt;
LPFN_SOCKET socket;
LPFN_WSAASYNCSELECT WSAAsyncSelect;
LPFN_WSACLEANUP WSACleanup;
LPFN_WSAGETLASTERROR WSAGetLastError;
LPFN_WSASTARTUP WSAStartup;
} winSock;
|
| ︙ | | | ︙ | |
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
|
if (!initialized) {
initialized = 1;
Tcl_CreateExitHandler(SocketExitHandler, (ClientData) NULL);
winSock.hModule = LoadLibraryA("wsock32.dll");
/*
* Initialize the function table.
*/
if (winSock.hModule == NULL) {
return;
}
winSock.accept = (LPFN_ACCEPT)
GetProcAddress(winSock.hModule, "accept");
winSock.bind = (LPFN_BIND)
GetProcAddress(winSock.hModule, "bind");
winSock.closesocket = (LPFN_CLOSESOCKET)
GetProcAddress(winSock.hModule, "closesocket");
winSock.connect = (LPFN_CONNECT)
|
>
>
>
>
<
<
<
<
|
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
|
if (!initialized) {
initialized = 1;
Tcl_CreateExitHandler(SocketExitHandler, (ClientData) NULL);
winSock.hModule = LoadLibraryA("wsock32.dll");
if (winSock.hModule == NULL) {
return;
}
/*
* Initialize the function table.
*/
winSock.accept = (LPFN_ACCEPT)
GetProcAddress(winSock.hModule, "accept");
winSock.bind = (LPFN_BIND)
GetProcAddress(winSock.hModule, "bind");
winSock.closesocket = (LPFN_CLOSESOCKET)
GetProcAddress(winSock.hModule, "closesocket");
winSock.connect = (LPFN_CONNECT)
|
| ︙ | | | ︙ | |
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
|
GetProcAddress(winSock.hModule, "recv");
winSock.select = (LPFN_SELECT)
GetProcAddress(winSock.hModule, "select");
winSock.send = (LPFN_SEND)
GetProcAddress(winSock.hModule, "send");
winSock.setsockopt = (LPFN_SETSOCKOPT)
GetProcAddress(winSock.hModule, "setsockopt");
winSock.shutdown = (LPFN_SHUTDOWN)
GetProcAddress(winSock.hModule, "shutdown");
winSock.socket = (LPFN_SOCKET)
GetProcAddress(winSock.hModule, "socket");
winSock.WSAAsyncSelect = (LPFN_WSAASYNCSELECT)
GetProcAddress(winSock.hModule, "WSAAsyncSelect");
winSock.WSACleanup = (LPFN_WSACLEANUP)
GetProcAddress(winSock.hModule, "WSACleanup");
winSock.WSAGetLastError = (LPFN_WSAGETLASTERROR)
|
<
<
|
312
313
314
315
316
317
318
319
320
321
322
323
324
325
|
GetProcAddress(winSock.hModule, "recv");
winSock.select = (LPFN_SELECT)
GetProcAddress(winSock.hModule, "select");
winSock.send = (LPFN_SEND)
GetProcAddress(winSock.hModule, "send");
winSock.setsockopt = (LPFN_SETSOCKOPT)
GetProcAddress(winSock.hModule, "setsockopt");
winSock.socket = (LPFN_SOCKET)
GetProcAddress(winSock.hModule, "socket");
winSock.WSAAsyncSelect = (LPFN_WSAASYNCSELECT)
GetProcAddress(winSock.hModule, "WSAAsyncSelect");
winSock.WSACleanup = (LPFN_WSACLEANUP)
GetProcAddress(winSock.hModule, "WSACleanup");
winSock.WSAGetLastError = (LPFN_WSAGETLASTERROR)
|
| ︙ | | | ︙ | |
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
|
*/
if (!SocketsEnabled()) {
Tcl_SetErrno(EFAULT);
return 0;
}
(void) memset((char *) sockaddrPtr, '\0', sizeof(struct sockaddr_in));
sockaddrPtr->sin_family = AF_INET;
sockaddrPtr->sin_port = winSock.htons((u_short) (port & 0xFFFF));
if (host == NULL) {
addr.s_addr = INADDR_ANY;
} else {
addr.s_addr = winSock.inet_addr(host);
if (addr.s_addr == INADDR_NONE) {
hostent = winSock.gethostbyname(host);
if (hostent != NULL) {
memcpy((char *) &addr,
(char *) hostent->h_addr_list[0],
(size_t) hostent->h_length);
} else {
#ifdef EHOSTUNREACH
Tcl_SetErrno(EHOSTUNREACH);
#else
#ifdef ENXIO
Tcl_SetErrno(ENXIO);
#endif
|
|
<
<
|
|
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
|
*/
if (!SocketsEnabled()) {
Tcl_SetErrno(EFAULT);
return 0;
}
ZeroMemory(sockaddrPtr, sizeof(SOCKADDR_IN));
sockaddrPtr->sin_family = AF_INET;
sockaddrPtr->sin_port = winSock.htons((u_short) (port & 0xFFFF));
if (host == NULL) {
addr.s_addr = INADDR_ANY;
} else {
addr.s_addr = winSock.inet_addr(host);
if (addr.s_addr == INADDR_NONE) {
hostent = winSock.gethostbyname(host);
if (hostent != NULL) {
memcpy(&addr, hostent->h_addr, hostent->h_length);
} else {
#ifdef EHOSTUNREACH
Tcl_SetErrno(EHOSTUNREACH);
#else
#ifdef ENXIO
Tcl_SetErrno(ENXIO);
#endif
|
| ︙ | | | ︙ | |