OpenersNotesSection(Spacer1)Details

In the normal course of using the Wolfram Symbolic Transfer Protocol, connections made between processes function on a one-to-one standard, meaning that when program A connects to program B, only A and B can use the communication endpoints established between A and B.   This one-to-one model differs from a traditional client/server communication model where a server advertises a connection in a one-to-many mode where the server has one connection and many clients connect to that one connection.   The WSTP Link Server functionality allows the user to create a program that offers a one-to-many connection using the Wolfram Symbolic Transfer Protocol.

WSNewLinkServerWithPort() creates a TCPIP link protocol WSTP endpoint on the network that allows many clients to connect.

WSNewLinkServerWithPort() creates a WSTP endpoint that can only be connected to by a WSTP interface 4 compatible program.

WSNewLinkServerWithPort() allows the WSTP library pick the interface to use for the link server.

The link server object will queue incoming connections that can be processed synchronously with the function (NonWLLink[WSWaitForNewLinkFromLinkServer(), paclet:ref/c/WSWaitForNewLinkFromLinkServer]), or asynchronously by registering a callback function with (NonWLLink[WSRegisterCallbackFunctionWithLinkServer(), paclet:ref/c/WSRegisterCallbackFunctionWithLinkServer]).

The context object c may be a pointer to any object needed by the program to manager link connections created by the link server.  The user can retrieve the context object using the function (NonWLLink[WSContextFromLinkServer(), paclet:ref/c/WSContextFromLinkServer]).

WSNewLinkServerWithPort() sets err to 0 if the function succeeds and a nonzero value if the function fails.

The nonzero values that indicate an error condition correspond to the WSE error codes in (RefLink[wstp.h, paclet:ref/file/wstp.h]) and as returned by (NonWLLink[WSError(), paclet:/ref/c/WSError]).

Use (NonWLLink[WSShutdownLinkServer(), paclet:ref/c/WSShutdownLinkServer]) to close down the link server mechanism.

OpenersPrimaryExamplesSection(Spacer1)Examples  (1)

OpenersExampleSection0(Spacer1)Basic Examples  (1)

#include "wstp.h"

void operateLinkServerOnPort(WSENV env, unsigned short port)
{
	int error;
	WSLinkServer linkServer;
	WSLINK theLink;


	linkServer = WSNewLinkServerWithPort(env, port,
		NULL /* No context object for this example */, &error);
	if(error != WSEOK)
	{ /* Handle error */ }

	theLink = WSWaitForNewLinkFromLinkserver(linkServer, &error);
	if(theLink == (WSLINK)0 || error != WSEOK)
	{ /* Handle error */ }

	...

	WSCLose(theLink);

	WSShutdownLinkServer(linkServer);
}

({{DocumentationFooterIconsRelatedFunction.png, ({{See Also}, {(NonWLLink[WSNewLinkServer(), paclet:ref/c/WSNewLinkServer])  ▪  (NonWLLink[ WSNewLinkServerWithPortAndInterface(), paclet:ref/c/WSNewLinkServerWithPortAndInterface])  ▪  (NonWLLink[WSShutdownLinkServer(), paclet:ref/c/WSShutdownLinkServer])  ▪  (NonWLLink[WSRegisterCallbackFunctionWithLinkServer(), paclet:ref/c/WSRegisterCallbackFunctionWithLinkServer])  ▪  (NonWLLink[WSWaitForNewLinkFromLinkServer(), paclet:ref/c/WSWaitForNewLinkFromLinkServer])  ▪  (NonWLLink[WSPortFromLinkServer(), paclet:ref/c/WSPortFromLinkServer])  ▪  (NonWLLink[WSInterfaceFromLinkServer(), paclet:ref/c/WSInterfaceFromLinkServer])  ▪  (NonWLLink[WSContextFromLinkServer(), paclet:ref/c/WSContextFromLinkServer])  ▪  (NonWLLink[WSReleaseInterfaceFromLinkServer(), paclet:ref/c/WSReleaseInterfaceFromLinkServer])}})}})

({{DocumentationFooterIconsRelatedTutorial.png, ({{Tutorials}, {▪(RefLinkPlain[WSTP C API Developer Guide (Mac OS X), paclet:tutorial/WSTPDeveloperGuide-MacintoshOverview])}, {▪(RefLinkPlain[WSTP C API Developer Guide (Unix and Linux), paclet:tutorial/WSTPDeveloperGuide-UnixOverview])}, {▪(RefLinkPlain[WSTP C API Developer Guide (Windows), paclet:tutorial/WSTPDeveloperGuide-WindowsOverview])}})}})