summaryrefslogtreecommitdiffstats
path: root/generic/tclIOSock.c
diff options
context:
space:
mode:
authormax <max@tclers.tk>2012-09-26 21:02:33 (GMT)
committermax <max@tclers.tk>2012-09-26 21:02:33 (GMT)
commit3c28c417ab57f3cee7f3a3fe146e835a86b8996e (patch)
tree4ab7562c5658167bcb610add94704809fee0b9c3 /generic/tclIOSock.c
parentc76078654159ce7bec7bdec7bc7295b49362f39e (diff)
downloadtcl-3c28c417ab57f3cee7f3a3fe146e835a86b8996e.zip
tcl-3c28c417ab57f3cee7f3a3fe146e835a86b8996e.tar.gz
tcl-3c28c417ab57f3cee7f3a3fe146e835a86b8996e.tar.bz2
Workaround for &#91;socket -server foo -myaddr localhost 0&#93; failure on OSX.
Diffstat (limited to 'generic/tclIOSock.c')
-rw-r--r--generic/tclIOSock.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/generic/tclIOSock.c b/generic/tclIOSock.c
index e603c91..694501f 100644
--- a/generic/tclIOSock.c
+++ b/generic/tclIOSock.c
@@ -151,7 +151,7 @@ TclCreateSocketAddress(
struct addrinfo *p;
struct addrinfo *v4head = NULL, *v4ptr = NULL;
struct addrinfo *v6head = NULL, *v6ptr = NULL;
- char *native = NULL, portstring[TCL_INTEGER_SPACE];
+ char *native = NULL, portbuf[TCL_INTEGER_SPACE], *portstring;
const char *family = NULL;
Tcl_DString ds;
int result, i;
@@ -159,7 +159,18 @@ TclCreateSocketAddress(
if (host != NULL) {
native = Tcl_UtfToExternalDString(NULL, host, -1, &ds);
}
- TclFormatInt(portstring, port);
+
+ /*
+ * Workaround for OSX's apparent inability to resolve "localhost", "0"
+ * when the loopback device is the only available network interface.
+ */
+ if (host != NULL && port == 0) {
+ portstring = NULL;
+ } else {
+ TclFormatInt(portbuf, port);
+ portstring = portbuf;
+ }
+
(void) memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;