| |
| SOCKET WINAPI 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.
- 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. |
- 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 integer value 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 an IPv6 address is specified as the local address, the system
must have an IPv6 stack installed and configured, otherwise the
function will fail.
To listen for connections on any suitable IPv4 interface,
specify the special dotted-quad address "0.0.0.0". You can accept
connections from clients using either IPv4 or IPv6 on the same
socket by specifying the special IPv6 address "::0", however this
is only supported on Windows 7 and Windows Server 2008 or later
platforms. If no local address is specified, then the server will
only listen for connections from clients using IPv4. This behavior
is by design for backwards compatibility with systems that do not
have an IPv6 TCP/IP stack installed.
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 active client connections are performed inside the event
handler. 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 7, Windows Vista or Windows
XP.
Server: Requires Windows Server 2008 or Windows Server
2003.
Header: Include cswsock7.h.
Library: Use cswskav7.lib.
See Also
InetGetServerData, InetGetServerPriority, InetGetServerStatus, InetServerLock, InetServerRestart, InetServerResume, InetServerStop, InetServerSuspend, InetServerThrottle, InetServerUnlock, InetSetServerData, InetSetServerPriority
|
|