#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) |
| 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.
----------------------------------------------------------------------
1.5.1