socket - Open a TCP network connection socket ?options? host port socket -server command ?options? port This command opens a network socket and returns a channel identifier that may be used in future invocations of commands like read, puts and flush. At present only the [TCP] network protocol is supported; future releases may include support for additional protocols like [UDP] and [IPX]. The socket command may be used to open either the client or server side of a connection, depending on whether the -server switch is specified. See also the official documentation at http://www.purl.org/tcl/home/man/tcl8.4/TclCmd/socket.htm Server sockets can only accept incoming connections when Tcl has an event loop running. All sockets use the system encoding by default; this is probably not what you want, but it is up to the protocol to define or negotiate something more suitable. ---- How to use the -async option? Pasted from the Tcl'ers chat dgp proc verify s { set msg [fconfigure $s -error] if {$msg ne ""} { # an error connecting } # set up to use $s } set s [socket -async $host $port] fileevent $s writable [list verify $s] dgp over the Tcl versions and platforms, I've found it helpful to test dgp [puts -nonewline $s ""] and [fconfigure $s -peername] to be *really* sure you have a successful socket connection. ---- [Cameron Laird] wrote in [the comp.lang.tcl newsgroup]: The most widely-used solution ''(for ensuring only a single instance of an app is running on one machine)'', I think, is to set up a do-nothing networking service. Have your application socket -server ... 5678 when it first starts. If it's unable to do so because another service is already on 5678, take that as a previous instance of the application. Otherwise, continue. For an implementation, see [How do I manage lock files in a cross platform manner in Tcl] Notice this approach is reasonably portable. CL himself notes, somewhat later, that this is a bit "tricky", and not on the main stream of socket use; it's really socket's contribution to the theme of [singleton application]s. ---- Sockets are also one way on [How can Tcl programs on two different machines communicate]. [JH] writes on sockets in http://aspn.activestate.com/ASPN/Cookbook/Tcl/Recipe/65436 . More possibilities are listed in the [Inventory of IPC methods]. Yet another example of socket service appears in http://moogy.unstable.org:8080/simple.sockets.tar.gz . ---- One little-known corner of TCP/IP is "[port 0 networking]". ---- Several challenges in effective network programming have to do with [DNS] pragmatics. [DKF] wrote, "numeric addresses are never resolved on socket creation on Unix, but they *are* on Windows (but I do not know if it is *really* doing it, as that depends on the Winsock implementation)." ---- One question that seems to arise often is about [how to send a file through a socket connection]. ---- As of 8.5, there's apparently no clean socket [introspection]. Socket handles '''do''' show up in "[file] channels sock*", though, so, as long as one is willing to rely on this slightly dirty match, the answer is computable. [DGP] See Tcl Feature Request 455867 [http://sourceforge.net/tracker/index.php?func=detail&aid=455867&group_id=10894&atid=360894]. ---- [GPS]: from the [Tcl Chatroom]: * xmav000 i'm trying to implement a game client/server architecture. can anyone give me some hints which projects i could look at to get some more ideas. there probably are some chat client/server (which will have to be a part of course) * GPS xmav: I have some code for you. Server tclsh: % proc accept {s addr port} {puts $s "Hi and bye!"; close $s} % socket -server accept 8888 Client tclsh: % set s [socket localhost 8888] sock3 % gets $s Now the client will block, because the server isn't running its event loop. So go to the server tclsh and type: update and you will see in the client: Hi and bye! (Wikified soon) * GPS I'm not sure if that's enough of what you need. Everything for a game server should be built upon this foundation though. * GPS fileevent is the command you will use to process sockets when they are readable or writable. * suchenwi GPS: hey, that looks cool! PLEASE wikify it (plus discussion)! [GPS]: I would like to clarify a bit. [fileevent] interacts with the event loop allowing us to do other things (rather than just blocking) and have an event callback invoked when data is ready to be send/received on a [socket] channel. ---- [Tcl syntax help] - [Arts and crafts of Tcl-Tk programming] - [Category Command]