|
|
| SOCKET InetServerStart(
|
|
|
LPCTSTR
lpszLocalHost, |
|
|
|
UINT
nLocalPort, |
|
|
|
UINT nBacklog, |
|
|
|
UINT
nMaxClients, |
|
|
|
UINT nTimeout, |
|
|
|
UINT nPriority, |
|
|
|
DWORD
dwOptions, |
|
|
|
INETEVENTPROC
lpEventProc, |
|
|
|
DWORD
dwEventParam, |
|
|
|
LPSECURITYCREDENTIALS
lpCredentials |
|
| );
|
The InetServerStart function begins listening
for client connections on the specified local address and port
number. The server is started in its own thread and manages the
client sessions independently of the calling thread. All
interaction with the server and its client sessions takes place
inside the callback function specified by the caller.
Parameters
- lpszLocalHost
- A pointer to a null-terminated string which specifies the local
hostname or IP address address that the socket should be bound to.
If this parameter is NULL or an empty string, then an appropriate
address will automatically be used. A specific address should only
be used if it is required by the application.
- nLocalPort
- The local port number that the socket should be bound to. This
value must be greater than zero.
- nBacklog
- The maximum length of queue of pending connections. On Windows
workstations, the maximum backlog value is 5. On Windows servers,
the maximum value is 200.
- nMaxClients
- The maximum number of client connections that can be
established with the server. A value of zero specifies that there
should not be any fixed limit on the number of active client
connections. This value can be adjusted after the server has been
created by calling the InetServerThrottle
function.
- nTimeout
- The number of seconds to wait for a network operation to
complete before failing the operation. A value of zero indicates
that the thread servicing the session should wait an indefinite
period of time.
- nPriority
- An integer value which specifies the priority for the server
and all client sessions. The priority for a specific client session
may be modified by calling the
InetSetClientPriority function. This parameter may
be one of the following values:
| Constant |
Description |
|
INET_PRIORITY_NORMAL |
The default priority which balances resource
and processor utilization. It is recommended that most applications
use this priority. |
|
INET_PRIORITY_BACKGROUND |
This priority significantly reduces the memory,
processor and network resource utilization for the client session.
It is typically used with lightweight services running in the
background that are designed for few client connections. The client
thread will be assigned a lower scheduling priority and will be
frequently forced to yield execution to other threads. |
|
INET_PRIORITY_LOW |
This priority lowers the overall resource
utilization for the client session and meters the processor
utilization for the client session. The client thread will be
assigned a lower scheduling priority and will occasionally be
forced to yield execution to other threads. |
|
INET_PRIORITY_HIGH |
This priority increases the overall resource
utilization for the client session and the thread will be given
higher scheduling priority. It can be used when it is important for
the client session thread to be highly responsive. It is not
recommended that this priority be used on a system with a single
processor. |
|
INET_PRIORITY_CRITICAL |
This priority can significantly increase
processor, memory and network utilization. The thread will be given
higher scheduling priority and will be more responsive to the
remote host. It is not recommended that this priority be used on a
system with a single processor. |
- dwOptions
- An unsigned long integer used to specify one or more socket
options. The following values are recognized:
| Constant |
Description |
|
INET_OPTION_NONE |
No option specified. If the address and port
number are in use by another application or a closed socket which
was listening on this port is still in the TIME_WAIT state, the
function will fail. |
|
INET_OPTION_REUSEADDR |
This option specifies that the local address
can be reused. This option enables a server application to listen
for connections using the specified address and port number even if
they were in use recently. This is typically used to enable an
application to close the listening socket and immediately reopen it
without getting an error that the address is in use. |
|
INET_OPTION_DONTROUTE |
This option specifies default routing should
not be used. This option should not be specified unless absolutely
necessary. |
|
INET_OPTION_KEEPALIVE |
This option specifies that packets are to be
sent to the remote system when no data is being exchanged to keep
the connection active. |
|
INET_OPTION_NODELAY |
This option disables the Nagle algorithm, which
buffers unacknowledged data and insures that a full-size packet can
be sent to the remote host. |
|
INET_OPTION_SECURE |
This option specifies that a secure connection
should be established with the remote host. This option can only be
used with the Secure Edition. |
- lpEventProc
- Specifies the address of the application defined callback
function. For more information about the callback function, see the
description of the InetEventProc callback function. This
parameter cannot be NULL.
- dwEventParam
- A user-defined unsigned long integer that is passed to the
callback function.
- lpCredentials
- Pointer to credentials structure SECURITYCREDENTIALS. This may be
NULL, unless the dwOptions parameter includes
INET_OPTION_SECURE. When a secure session is specified, the fields
dwSize, lpszCertStore, and lpszCertName must
be defined, while other fields may be left undefined. Set
dwSize to the size of the SECURITYCREDENTIALS
structure.
Return Value
If the function succeeds, the return value is a socket handle.
If the function fails, the return value is INVALID_SOCKET. To get
extended error information, call InetGetLastError.
Remarks
In most cases, the lpszLocalHost parameter should be a
NULL pointer or an empty string. On a multihomed system, this will
enable the server to accept connections on any appropriately
configured network adapter. Specifying a hostname or IP address
will limit client connections to that particular address. Note that
the hostname or address must be one that is assigned to the local
system, otherwise an error will occur.
If the INET_OPTION_REUSEADDR option is not specified, an error
may be returned if a listening socket was recently created for the
same local address and port number. By default, once a listening
socket is closed there is a period of time that all applications
must wait before the address can be reused (this is called the
TIME_WAIT state). The actual amount of time depends on the
operating system and configuration parameters, but is typically two
to four minutes. Specifying this option enables an application to
immediately re-use a local address and port number that was
previously in use. Note that this does not permit more than one
server to bind to the same address.
The socket handle returned by this function references the
listening socket that was created when the server was started. The
service is managed in another thread, and all interaction with the
server and its active client connections is performed inside the
event handler callback. To disconnect all active connections, close
the listening socket and terminate the server thread, call the
InetServerStop function.
Example
#define SERVER_PORT 7000
#define SERVER_CLIENTS 100
SOCKET hServer = INVALID_SOCKET;
// Accept connections from clients that connection on port 7000 with a standard
// backlog of 5 connections and a maximum of 100 client connections.
hServer = InetServerStart(NULL,
SERVER_PORT,
INET_BACKLOG,
SERVER_CLIENTS,
INET_TIMEOUT,
INET_PRIORITY_NORMAL,
INET_OPTION_REUSEADDR,
MyEventHandler,
0,
NULL);
if (hServer == INVALID_SOCKET)
{
DWORD dwError;
TCHAR szError[256];
dwError = InetGetLastError();
InetGetErrorString(dwError, szError, 256);
MessageBox(NULL, szError, NULL, MB_OK|MB_TASKMODAL);
return;
}
Requirements
Client: Requires Windows Vista, Windows XP or Windows
2000 Professional.
Server: Requires Windows Server 2008, Windows Server 2003 or
Windows 2000 Server.
Header: Include cswsock6.h.
Library: Use cswskav6.lib.
See Also
InetGetServerData, InetGetServerPriority, InetGetServerStatus, InetServerLock, InetServerRestart, InetServerResume, InetServerStop, InetServerSuspend, InetServerThrottle, InetServerUnlock, InetSetServerData, InetSetServerPriority
|
|