summaryrefslogtreecommitdiffstats
path: root/unix/tclUnixChan.c
diff options
context:
space:
mode:
authorandreas_kupries <akupries@shaw.ca>2003-10-23 18:00:08 (GMT)
committerandreas_kupries <akupries@shaw.ca>2003-10-23 18:00:08 (GMT)
commit9f75af18b6ee3a121bf025014fed5a65f15e81d2 (patch)
tree40ff3cac4c93261e8edf98b1de44da11cc5a9862 /unix/tclUnixChan.c
parent1d1fdb300f355bc1ed87d097c5210d8f41399e37 (diff)
downloadtcl-9f75af18b6ee3a121bf025014fed5a65f15e81d2.zip
tcl-9f75af18b6ee3a121bf025014fed5a65f15e81d2.tar.gz
tcl-9f75af18b6ee3a121bf025014fed5a65f15e81d2.tar.bz2
* unix/tclUnixChan.c (Tcl_MakeFileChannel): Applied [Patch 813606]
fixing [Bug 813087]. Detection of sockets was off for Mac OS X which implements pipes as local sockets. The new code ensures that only IP sockets are detected as such.
Diffstat (limited to 'unix/tclUnixChan.c')
-rw-r--r--unix/tclUnixChan.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/unix/tclUnixChan.c b/unix/tclUnixChan.c
index 133e44f..bb2b9c0 100644
--- a/unix/tclUnixChan.c
+++ b/unix/tclUnixChan.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclUnixChan.c,v 1.42 2003/02/21 02:36:27 hobbs Exp $
+ * RCS: @(#) $Id: tclUnixChan.c,v 1.43 2003/10/23 18:00:10 andreas_kupries Exp $
*/
#include "tclInt.h" /* Internal definitions for Tcl. */
@@ -1889,8 +1889,8 @@ Tcl_MakeFileChannel(handle, mode)
#ifdef DEPRECATED
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
#endif /* DEPRECATED */
- int socketType = 0;
- socklen_t argLength = sizeof(int);
+ struct sockaddr sockaddr;
+ socklen_t sockaddrLen = sizeof(sockaddr);
if (mode == 0) {
return NULL;
@@ -1911,6 +1911,8 @@ Tcl_MakeFileChannel(handle, mode)
}
#endif /* DEPRECATED */
+ sockaddr.sa_family = AF_UNSPEC;
+
#ifdef SUPPORTS_TTY
if (isatty(fd)) {
fsPtr = TtyInit(fd, 0);
@@ -1918,8 +1920,9 @@ Tcl_MakeFileChannel(handle, mode)
sprintf(channelName, "serial%d", fd);
} else
#endif /* SUPPORTS_TTY */
- if (getsockopt(fd, SOL_SOCKET, SO_TYPE, (VOID *)&socketType,
- &argLength) == 0 && socketType == SOCK_STREAM) {
+ if (getsockname(fd, (struct sockaddr *)&sockaddr, &sockaddrLen) == 0
+ && sockaddrLen > 0
+ && sockaddr.sa_family == AF_INET) {
return MakeTcpClientChannelMode((ClientData) fd, mode);
} else {
channelTypePtr = &fileChannelType;