|
The Internet Control Message Protocol (ICMP) library enables
your application to send and receive ICMP echo datagrams. These are
a special type of IP datagram which can be used to determine if a
server is reachable, as well as determine the amount of time it
takes for data to be exchanged with the local system. The ICMP
library can also be used to trace the route that data takes from
the local system to the server, which can be useful in determining
why a connection to a particular system may be experiencing higher
latency than normal.
The first step that your application must take is to initialize
the library and then create a handle for the client session. Unlike
many of the other libraries, there are no connection related
functions because ICMP uses IP datagrams rather than TCP streams.
The following functions are available for use by your
application:
IcmpInitialize
Initialize the library and load the Windows Sockets library for the
current process. This must be the first function call that the
application makes before calling the other ICMP API functions.
IcmpCreateHandle
This function will return a handle to a client session which is
used in subsequent calls to the ICMP API. It is only required that
you call this function if you're using the lower level ICMP
functions to send and receive ICMP echo datagrams. The higher level
functions like IcmpEcho and IcmpTraceRoute do not
require a handle.
IcmpCloseHandle
Release the handle that was previously created by the call to
IcmpCreateHandle. Any memory allocated by the library on
behalf of the application is released and the datagram socket that
was created is closed.
IcmpUninitialize
Unload the Windows Sockets library and release any resources that
have been allocated for the current process. This is the last
function call that the application should make prior to
terminating.
Ping and TraceRoute
To determine if a server is reachable, your application can send
ICMP echo datagrams. You can also map the route between the local
system and the server by sending a series of echo datagrams to each
intermediate host. This is what the ping.exe and tracert.exe
command line utilities do, and you can emulate that functionality
in your own applications.
IcmpEcho
This is the simplest function you can use to send ICMP echo
datagrams. Specify the server, the size of the ICMP datagram you
want to send and the number of times you want to send it. The
function will return if the operation was successful along with
information such as the average number of milliseconds it took for
the datagram to be returned by the server. Note that it is not
required that you create a handle to use this function.
IcmpTraceRoute
This function will map the route that data packets take from your
local system to a server. Whenever you send data over the Internet,
that data is routed from one computer system to another until it
reaches its destination. This function returns statistical
information about each system that the data is routed through, and
the latency between that system and the local host.
IcmpSendEcho
This is a lower level function that will send a single ICMP echo
datagram. It can be used with applications that want to have more
direct control over the process of how the datagrams are sent, and
is typically used with asynchronous sessions.
IcmpRecvEcho
This is a lower level function that will receive a single ICMP echo
reply datagram that was returned by the server. Typically this is
used to receive datagrams that were sent in response to the
IcmpSendEcho function. The IcmpGetTripTime function
can be used after the function returns in order to check the amount
of time it took to receive the datagram.
|