tclsock.c File Reference

#include "nsd.h"

Data Structures

struct  TclSockCallback
struct  ListenCallback

Functions

void NsTclSockArgProc (Tcl_DString *dsPtr, void *arg)
int NsTclGetHostObjCmd (ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
int NsTclGetAddrObjCmd (ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
int NsTclSockSetBlockingObjCmd (ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
int NsTclSockSetNonBlockingObjCmd (ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
int NsTclSockNReadObjCmd (ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
int NsTclSockListenObjCmd (ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
int NsTclSockAcceptObjCmd (ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
int NsTclSockCheckObjCmd (ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
int NsTclSockOpenObjCmd (ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
int NsTclSelectObjCmd (ClientData dummy, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
int NsTclSocketPairObjCmd (ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
int NsTclSockCallbackObjCmd (ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
int NsTclSockListenCallbackObjCmd (ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
int NsTclSockProc (SOCKET sock, void *arg, int why)

Function Documentation

int NsTclGetAddrObjCmd ( ClientData  arg,
Tcl_Interp *  interp,
int  objc,
Tcl_Obj *CONST  objv[] 
)

int NsTclGetHostObjCmd ( ClientData  arg,
Tcl_Interp *  interp,
int  objc,
Tcl_Obj *CONST  objv[] 
)

int NsTclSelectObjCmd ( ClientData  dummy,
Tcl_Interp *  interp,
int  objc,
Tcl_Obj *CONST  objv[] 
)

----------------------------------------------------------------------

NsTclSelectObjCmd --

Imlements select: basically a tcl version of select(2).

Results: Tcl result.

Side effects: See docs.

----------------------------------------------------------------------

Readable fd's are treated differently because they may have buffered input. Before doing a select, see if they have any waiting data that's been buffered by the channel.

Since at least one read fd had buffered input, turn the select into a polling select just to pick up anything else ready right now.

Return immediately if we're not doing a select on anything.

Actually perform the select.

The sets can have any random value now

int NsTclSockAcceptObjCmd ( ClientData  arg,
Tcl_Interp *  interp,
int  objc,
Tcl_Obj *CONST  objv[] 
)

----------------------------------------------------------------------

NsTclSockAcceptObjCmd --

Accept a connection from a listening socket.

Results: Tcl result.

Side effects: None.

----------------------------------------------------------------------

void NsTclSockArgProc ( Tcl_DString *  dsPtr,
void *  arg 
)

int NsTclSockCallbackObjCmd ( ClientData  arg,
Tcl_Interp *  interp,
int  objc,
Tcl_Obj *CONST  objv[] 
)

----------------------------------------------------------------------

NsTclSockCallbackCmd --

Register a Tcl callback to be run when a certain state exists on a socket.

Results: Tcl result.

Side effects: A callback will be registered.

----------------------------------------------------------------------

Pass a dup of the socket to the callback thread, allowing this thread's cleanup to close the current socket. It's not possible to simply register the channel again with a NULL interp because the Tcl channel code is not entirely thread safe.

int NsTclSockCheckObjCmd ( ClientData  arg,
Tcl_Interp *  interp,
int  objc,
Tcl_Obj *CONST  objv[] 
)

----------------------------------------------------------------------

NsTclSockCheckObjCmd --

Check if a socket is still connected, useful for nonblocking.

Results: Tcl result.

Side effects: None.

----------------------------------------------------------------------

int NsTclSocketPairObjCmd ( ClientData  arg,
Tcl_Interp *  interp,
int  objc,
Tcl_Obj *CONST  objv[] 
)

----------------------------------------------------------------------

NsTclSocketPairObjCmd --

Create a new socket pair.

Results: Tcl result.

Side effects: None.

----------------------------------------------------------------------

int NsTclSockListenCallbackObjCmd ( ClientData  arg,
Tcl_Interp *  interp,
int  objc,
Tcl_Obj *CONST  objv[] 
)

----------------------------------------------------------------------

NsTclSockListenCallbackObjCmd --

Listen on a socket and register a callback to run when connections arrive.

Results: Tcl result.

Side effects: Will register a callback and listen on a socket.

----------------------------------------------------------------------

int NsTclSockListenObjCmd ( ClientData  arg,
Tcl_Interp *  interp,
int  objc,
Tcl_Obj *CONST  objv[] 
)

----------------------------------------------------------------------

NsTclSockListenObjCmd --

Listen on a TCP port.

Results: Tcl result.

Side effects: Will listen on a port.

----------------------------------------------------------------------

int NsTclSockNReadObjCmd ( ClientData  arg,
Tcl_Interp *  interp,
int  objc,
Tcl_Obj *CONST  objv[] 
)

----------------------------------------------------------------------

NsTclSockNReadObjCmd --

Gets the number of bytes that a socket has waiting to be read.

Results: Tcl result.

Side effects: None.

----------------------------------------------------------------------

int NsTclSockOpenObjCmd ( ClientData  arg,
Tcl_Interp *  interp,
int  objc,
Tcl_Obj *CONST  objv[] 
)

----------------------------------------------------------------------

NsTclSockOpenObjCmd --

Open a tcp connection to a host/port.

Results: Tcl result.

Side effects: Will open a connection.

----------------------------------------------------------------------

Parse optional arguments. Note that either the: -nonblock | -async or -timeout seconds combinations are accepted.

End of options

Get the host to connect to. Bark on invalid entry.

Get the port to connect to. Bark on invalid entry.

Perform the connection.

int NsTclSockProc ( SOCKET  sock,
void *  arg,
int  why 
)

----------------------------------------------------------------------

NsTclSockProc --

This is the C wrapper callback that is registered from callback.

Results: NS_TRUE or NS_FALSE on error

Side effects: Will run Tcl script.

----------------------------------------------------------------------

Create and register the channel on first use. Because the Tcl channel code is not entirely thread safe, it's not possible for the scheduling thread to create and register the channel.

int NsTclSockSetBlockingObjCmd ( ClientData  arg,
Tcl_Interp *  interp,
int  objc,
Tcl_Obj *CONST  objv[] 
)

----------------------------------------------------------------------

NsTclSockSetBlockingObjCmd --

Sets a socket blocking.

Results: Tcl result.

Side effects: None.

----------------------------------------------------------------------

int NsTclSockSetNonBlockingObjCmd ( ClientData  arg,
Tcl_Interp *  interp,
int  objc,
Tcl_Obj *CONST  objv[] 
)

----------------------------------------------------------------------

NsTclSockSetNonBlockingObjCmd --

Sets a socket nonblocking.

Results: Tcl result.

Side effects: None.

----------------------------------------------------------------------


Generated on Tue Sep 4 19:58:56 2007 by  doxygen 1.5.1