diff options
author | limeboy <that.lemon+tcl@gmai.com> | 2016-12-14 15:49:27 (GMT) |
---|---|---|
committer | limeboy <that.lemon+tcl@gmai.com> | 2016-12-14 15:49:27 (GMT) |
commit | fdc5267c5f6488e6f8065453fc078e0ebc45d861 (patch) | |
tree | 252d57e9f2c63147b2b616e30c2c54e1fe47a086 /generic/tclIOCmd.c | |
parent | bba3b008ba9e94fbe9a9ffce00aaf90077136fca (diff) | |
download | tcl-fdc5267c5f6488e6f8065453fc078e0ebc45d861.zip tcl-fdc5267c5f6488e6f8065453fc078e0ebc45d861.tar.gz tcl-fdc5267c5f6488e6f8065453fc078e0ebc45d861.tar.bz2 |
Make OpenTcpServerEx accept a 'service' string parameter instead of a port.
Diffstat (limited to 'generic/tclIOCmd.c')
-rw-r--r-- | generic/tclIOCmd.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/generic/tclIOCmd.c b/generic/tclIOCmd.c index d6637a0..951fb5a 100644 --- a/generic/tclIOCmd.c +++ b/generic/tclIOCmd.c @@ -1492,9 +1492,9 @@ Tcl_SocketObjCmd( SKT_ASYNC, SKT_MYADDR, SKT_MYPORT, SKT_REUSEADDR, SKT_REUSEPORT, SKT_SERVER }; - int optionIndex, a, server = 0, port, myport = 0, async = 0, boolTmp; + int optionIndex, a, server = 0, myport = 0, async = 0, boolTmp; unsigned int flags = 0; - const char *host, *myaddr = NULL; + const char *host, *port, *myaddr = NULL; Tcl_Obj *script = NULL; Tcl_Channel chan; @@ -1628,15 +1628,14 @@ Tcl_SocketObjCmd( return TCL_ERROR; } - if (a == objc-1) { - if (TclSockGetPort(interp, TclGetString(objv[a]), "tcp", - &port) != TCL_OK) { - return TCL_ERROR; - } - } else { + // All the arguments should have been parsed by now, 'a' points to the last + // one, the port number. + if (a != objc-1) { goto wrongNumArgs; } + port = TclGetString(objv[a]); + if (server) { AcceptCallback *acceptCallbackPtr = ckalloc(sizeof(AcceptCallback)); @@ -1646,7 +1645,7 @@ Tcl_SocketObjCmd( acceptCallbackPtr->interp = interp; chan = Tcl_OpenTcpServerEx(interp, port, host, flags, AcceptCallbackProc, - acceptCallbackPtr); + acceptCallbackPtr); if (chan == NULL) { Tcl_DecrRefCount(script); ckfree(acceptCallbackPtr); @@ -1670,7 +1669,13 @@ Tcl_SocketObjCmd( Tcl_CreateCloseHandler(chan, TcpServerCloseProc, acceptCallbackPtr); } else { - chan = Tcl_OpenTcpClient(interp, port, host, myaddr, myport, async); + int portNum; + + if (TclSockGetPort(interp, port, "tcp", &portNum) != TCL_OK) { + return TCL_ERROR; + } + + chan = Tcl_OpenTcpClient(interp, portNum, host, myaddr, myport, async); if (chan == NULL) { return TCL_ERROR; } |