<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Winsock_Examples</id>
	<title>Winsock Examples - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Winsock_Examples"/>
	<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Winsock_Examples&amp;action=history"/>
	<updated>2026-05-18T13:54:31Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Winsock_Examples&amp;diff=1627&amp;oldid=prev</id>
		<title>PeterHarding: New page: =Examples=   ==Winsock 1== ===gethtttp.c===  &lt;pre&gt; // // GetHTTP.cpp // // Retrieves a file using the Hyper Text Transfer Protocol // and prints its contents to stdout. //  // // Pass the ...</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Winsock_Examples&amp;diff=1627&amp;oldid=prev"/>
		<updated>2008-03-06T23:50:12Z</updated>

		<summary type="html">&lt;p&gt;New page: =Examples=   ==Winsock 1== ===gethtttp.c===  &amp;lt;pre&amp;gt; // // GetHTTP.cpp // // Retrieves a file using the Hyper Text Transfer Protocol // and prints its contents to stdout. //  // // Pass the ...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Examples=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Winsock 1==&lt;br /&gt;
===gethtttp.c===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//&lt;br /&gt;
// GetHTTP.cpp&lt;br /&gt;
//&lt;br /&gt;
// Retrieves a file using the Hyper Text Transfer Protocol&lt;br /&gt;
// and prints its contents to stdout.&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
// Pass the server name and full path of the file on the &lt;br /&gt;
// command line and redirect the output to a file. The program&lt;br /&gt;
// prints messages to stderr as it progresses.&lt;br /&gt;
//&lt;br /&gt;
// Example:&lt;br /&gt;
//		GetHTTP www.idgbooks.com /index.html &amp;gt; index.html&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;winsock.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void GetHTTP(LPCSTR lpServerName, LPCSTR lpFileName);&lt;br /&gt;
&lt;br /&gt;
// Helper macro for displaying errors&lt;br /&gt;
#define PRINTERROR(s)	\&lt;br /&gt;
		fprintf(stderr,&amp;quot;\n%: %d\n&amp;quot;, s, WSAGetLastError())&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
void main(int argc, char **argv)&lt;br /&gt;
{&lt;br /&gt;
	WORD wVersionRequested = MAKEWORD(1,1);&lt;br /&gt;
	WSADATA wsaData;&lt;br /&gt;
	int nRet;&lt;br /&gt;
&lt;br /&gt;
	//&lt;br /&gt;
	// Check arguments&lt;br /&gt;
	//&lt;br /&gt;
	if (argc != 3)&lt;br /&gt;
	{&lt;br /&gt;
		fprintf(stderr,&lt;br /&gt;
			&amp;quot;\nSyntax: GetHTTP ServerName FullPathName\n&amp;quot;);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//&lt;br /&gt;
	// Initialize WinSock.dll&lt;br /&gt;
	//&lt;br /&gt;
	nRet = WSAStartup(wVersionRequested, &amp;amp;wsaData);&lt;br /&gt;
	if (nRet)&lt;br /&gt;
	{&lt;br /&gt;
		fprintf(stderr,&amp;quot;\nWSAStartup(): %d\n&amp;quot;, nRet);&lt;br /&gt;
		WSACleanup();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	//&lt;br /&gt;
	// Check WinSock version&lt;br /&gt;
	//&lt;br /&gt;
	if (wsaData.wVersion != wVersionRequested)&lt;br /&gt;
	{&lt;br /&gt;
		fprintf(stderr,&amp;quot;\nWinSock version not supported\n&amp;quot;);&lt;br /&gt;
		WSACleanup();&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//&lt;br /&gt;
	// Set &amp;quot;stdout&amp;quot; to binary mode&lt;br /&gt;
	// so that redirection will work&lt;br /&gt;
	// for .gif and .jpg files&lt;br /&gt;
	//&lt;br /&gt;
	_setmode(_fileno(stdout), _O_BINARY);&lt;br /&gt;
&lt;br /&gt;
	//&lt;br /&gt;
	// Call GetHTTP() to do all the work&lt;br /&gt;
	//&lt;br /&gt;
	GetHTTP(argv[1], argv[2]);&lt;br /&gt;
&lt;br /&gt;
	//&lt;br /&gt;
	// Release WinSock&lt;br /&gt;
	//&lt;br /&gt;
	WSACleanup();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
void GetHTTP(LPCSTR lpServerName, LPCSTR lpFileName)&lt;br /&gt;
{&lt;br /&gt;
	//&lt;br /&gt;
	// Use inet_addr() to determine if we&amp;#039;re dealing with a name&lt;br /&gt;
	// or an address&lt;br /&gt;
	//&lt;br /&gt;
	IN_ADDR		iaHost;&lt;br /&gt;
	LPHOSTENT	lpHostEntry;&lt;br /&gt;
&lt;br /&gt;
	iaHost.s_addr = inet_addr(lpServerName);&lt;br /&gt;
	if (iaHost.s_addr == INADDR_NONE)&lt;br /&gt;
	{&lt;br /&gt;
		// Wasn&amp;#039;t an IP address string, assume it is a name&lt;br /&gt;
		lpHostEntry = gethostbyname(lpServerName);&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		// It was a valid IP address string&lt;br /&gt;
		lpHostEntry = gethostbyaddr((const char *)&amp;amp;iaHost, &lt;br /&gt;
						sizeof(struct in_addr), AF_INET);&lt;br /&gt;
	}&lt;br /&gt;
	if (lpHostEntry == NULL)&lt;br /&gt;
	{&lt;br /&gt;
		PRINTERROR(&amp;quot;gethostbyname()&amp;quot;);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	//	&lt;br /&gt;
	// Create a TCP/IP stream socket&lt;br /&gt;
	//&lt;br /&gt;
	SOCKET	Socket;	&lt;br /&gt;
&lt;br /&gt;
	Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);&lt;br /&gt;
	if (Socket == INVALID_SOCKET)&lt;br /&gt;
	{&lt;br /&gt;
		PRINTERROR(&amp;quot;socket()&amp;quot;); &lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	//&lt;br /&gt;
	// Find the port number for the HTTP service on TCP&lt;br /&gt;
	//&lt;br /&gt;
	LPSERVENT lpServEnt;&lt;br /&gt;
	SOCKADDR_IN saServer;&lt;br /&gt;
&lt;br /&gt;
	lpServEnt = getservbyname(&amp;quot;http&amp;quot;, &amp;quot;tcp&amp;quot;);&lt;br /&gt;
	if (lpServEnt == NULL)&lt;br /&gt;
		saServer.sin_port = htons(80);&lt;br /&gt;
	else&lt;br /&gt;
		saServer.sin_port = lpServEnt-&amp;gt;s_port;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	//&lt;br /&gt;
	// Fill in the rest of the server address structure&lt;br /&gt;
	//&lt;br /&gt;
	saServer.sin_family = AF_INET;&lt;br /&gt;
	saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry-&amp;gt;h_addr_list);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	//&lt;br /&gt;
	// Connect the socket&lt;br /&gt;
	//&lt;br /&gt;
	int nRet;&lt;br /&gt;
&lt;br /&gt;
	nRet = connect(Socket, (LPSOCKADDR)&amp;amp;saServer, sizeof(SOCKADDR_IN));&lt;br /&gt;
	if (nRet == SOCKET_ERROR)&lt;br /&gt;
	{&lt;br /&gt;
		PRINTERROR(&amp;quot;connect()&amp;quot;);&lt;br /&gt;
		closesocket(Socket);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	//&lt;br /&gt;
	// Format the HTTP request&lt;br /&gt;
	//&lt;br /&gt;
	char szBuffer[1024];&lt;br /&gt;
&lt;br /&gt;
	sprintf(szBuffer, &amp;quot;GET %s\n&amp;quot;, lpFileName);&lt;br /&gt;
	nRet = send(Socket, szBuffer, strlen(szBuffer), 0);&lt;br /&gt;
	if (nRet == SOCKET_ERROR)&lt;br /&gt;
	{&lt;br /&gt;
		PRINTERROR(&amp;quot;send()&amp;quot;);&lt;br /&gt;
		closesocket(Socket);	&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//&lt;br /&gt;
	// Receive the file contents and print to stdout&lt;br /&gt;
	//&lt;br /&gt;
	while(1)&lt;br /&gt;
	{&lt;br /&gt;
		// Wait to receive, nRet = NumberOfBytesReceived&lt;br /&gt;
		nRet = recv(Socket, szBuffer, sizeof(szBuffer), 0);&lt;br /&gt;
		if (nRet == SOCKET_ERROR)&lt;br /&gt;
		{&lt;br /&gt;
			PRINTERROR(&amp;quot;recv()&amp;quot;);&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		fprintf(stderr,&amp;quot;\nrecv() returned %d bytes&amp;quot;, nRet);&lt;br /&gt;
&lt;br /&gt;
		// Did the server close the connection?&lt;br /&gt;
		if (nRet == 0)&lt;br /&gt;
			break;&lt;br /&gt;
		// Write to stdout&lt;br /&gt;
        fwrite(szBuffer, nRet, 1, stdout);&lt;br /&gt;
	}&lt;br /&gt;
	closesocket(Socket);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ping.c===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//&lt;br /&gt;
// PING.C -- Ping program using ICMP and RAW Sockets&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;winsock.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;ping.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// Internal Functions&lt;br /&gt;
void Ping(LPCSTR pstrHost);&lt;br /&gt;
void ReportError(LPCSTR pstrFrom);&lt;br /&gt;
int  WaitForEchoReply(SOCKET s);&lt;br /&gt;
u_short in_cksum(u_short *addr, int len);&lt;br /&gt;
&lt;br /&gt;
// ICMP Echo Request/Reply functions&lt;br /&gt;
int		SendEchoRequest(SOCKET, LPSOCKADDR_IN);&lt;br /&gt;
DWORD	RecvEchoReply(SOCKET, LPSOCKADDR_IN, u_char *);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// main()&lt;br /&gt;
void main(int argc, char **argv)&lt;br /&gt;
{&lt;br /&gt;
    WSADATA wsaData;&lt;br /&gt;
    WORD wVersionRequested = MAKEWORD(1,1);&lt;br /&gt;
    int nRet;&lt;br /&gt;
&lt;br /&gt;
	// Check arguments&lt;br /&gt;
    if (argc != 2)&lt;br /&gt;
    {&lt;br /&gt;
		fprintf(stderr,&amp;quot;\nUsage: ping hostname\n&amp;quot;);&lt;br /&gt;
		return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
	// Init WinSock&lt;br /&gt;
    nRet = WSAStartup(wVersionRequested, &amp;amp;wsaData);&lt;br /&gt;
    if (nRet)&lt;br /&gt;
    {&lt;br /&gt;
		fprintf(stderr,&amp;quot;\nError initializing WinSock\n&amp;quot;);&lt;br /&gt;
		return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
	// Check version&lt;br /&gt;
	if (wsaData.wVersion != wVersionRequested)&lt;br /&gt;
	{&lt;br /&gt;
		fprintf(stderr,&amp;quot;\nWinSock version not supported\n&amp;quot;);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Go do the ping&lt;br /&gt;
	Ping(argv[1]);&lt;br /&gt;
&lt;br /&gt;
	// Free WinSock&lt;br /&gt;
    WSACleanup();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Ping()&lt;br /&gt;
// Calls SendEchoRequest() and&lt;br /&gt;
// RecvEchoReply() and prints results&lt;br /&gt;
void Ping(LPCSTR pstrHost)&lt;br /&gt;
{&lt;br /&gt;
	SOCKET	  rawSocket;&lt;br /&gt;
	LPHOSTENT lpHost;&lt;br /&gt;
	struct    sockaddr_in saDest;&lt;br /&gt;
	struct    sockaddr_in saSrc;&lt;br /&gt;
	DWORD	  dwTimeSent;&lt;br /&gt;
	DWORD	  dwElapsed;&lt;br /&gt;
	u_char    cTTL;&lt;br /&gt;
	int       nLoop;&lt;br /&gt;
	int       nRet;&lt;br /&gt;
&lt;br /&gt;
	// Create a Raw socket&lt;br /&gt;
	rawSocket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);&lt;br /&gt;
	if (rawSocket == SOCKET_ERROR) &lt;br /&gt;
	{&lt;br /&gt;
		ReportError(&amp;quot;socket()&amp;quot;);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Lookup host&lt;br /&gt;
	lpHost = gethostbyname(pstrHost);&lt;br /&gt;
	if (lpHost == NULL)&lt;br /&gt;
	{&lt;br /&gt;
		fprintf(stderr,&amp;quot;\nHost not found: %s\n&amp;quot;, pstrHost);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Setup destination socket address&lt;br /&gt;
	saDest.sin_addr.s_addr = *((u_long FAR *) (lpHost-&amp;gt;h_addr));&lt;br /&gt;
	saDest.sin_family = AF_INET;&lt;br /&gt;
	saDest.sin_port = 0;&lt;br /&gt;
&lt;br /&gt;
	// Tell the user what we&amp;#039;re doing&lt;br /&gt;
	printf(&amp;quot;\nPinging %s [%s] with %d bytes of data:\n&amp;quot;,&lt;br /&gt;
				pstrHost,&lt;br /&gt;
				inet_ntoa(saDest.sin_addr),&lt;br /&gt;
				REQ_DATASIZE);&lt;br /&gt;
&lt;br /&gt;
	// Ping multiple times&lt;br /&gt;
	for (nLoop = 0; nLoop &amp;lt; 4; nLoop++)&lt;br /&gt;
	{&lt;br /&gt;
		// Send ICMP echo request&lt;br /&gt;
		SendEchoRequest(rawSocket, &amp;amp;saDest);&lt;br /&gt;
&lt;br /&gt;
		// Use select() to wait for data to be received&lt;br /&gt;
		nRet = WaitForEchoReply(rawSocket);&lt;br /&gt;
		if (nRet == SOCKET_ERROR)&lt;br /&gt;
		{&lt;br /&gt;
			ReportError(&amp;quot;select()&amp;quot;);&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
		if (!nRet)&lt;br /&gt;
		{&lt;br /&gt;
			printf(&amp;quot;\nTimeOut&amp;quot;);&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Receive reply&lt;br /&gt;
		dwTimeSent = RecvEchoReply(rawSocket, &amp;amp;saSrc, &amp;amp;cTTL);&lt;br /&gt;
&lt;br /&gt;
		// Calculate elapsed time&lt;br /&gt;
		dwElapsed = GetTickCount() - dwTimeSent;&lt;br /&gt;
		printf(&amp;quot;\nReply from: %s: bytes=%d time=%ldms TTL=%d&amp;quot;, &lt;br /&gt;
               inet_ntoa(saSrc.sin_addr), &lt;br /&gt;
			   REQ_DATASIZE,&lt;br /&gt;
               dwElapsed,&lt;br /&gt;
               cTTL);&lt;br /&gt;
	}&lt;br /&gt;
	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
	nRet = closesocket(rawSocket);&lt;br /&gt;
	if (nRet == SOCKET_ERROR)&lt;br /&gt;
		ReportError(&amp;quot;closesocket()&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// SendEchoRequest()&lt;br /&gt;
// Fill in echo request header&lt;br /&gt;
// and send to destination&lt;br /&gt;
int SendEchoRequest(SOCKET s,LPSOCKADDR_IN lpstToAddr) &lt;br /&gt;
{&lt;br /&gt;
	static ECHOREQUEST echoReq;&lt;br /&gt;
	static nId = 1;&lt;br /&gt;
	static nSeq = 1;&lt;br /&gt;
	int nRet;&lt;br /&gt;
&lt;br /&gt;
	// Fill in echo request&lt;br /&gt;
	echoReq.icmpHdr.Type		= ICMP_ECHOREQ;&lt;br /&gt;
	echoReq.icmpHdr.Code		= 0;&lt;br /&gt;
	echoReq.icmpHdr.Checksum	= 0;&lt;br /&gt;
	echoReq.icmpHdr.ID			= nId++;&lt;br /&gt;
	echoReq.icmpHdr.Seq			= nSeq++;&lt;br /&gt;
&lt;br /&gt;
	// Fill in some data to send&lt;br /&gt;
	for (nRet = 0; nRet &amp;lt; REQ_DATASIZE; nRet++)&lt;br /&gt;
		echoReq.cData[nRet] = &amp;#039; &amp;#039;+nRet;&lt;br /&gt;
&lt;br /&gt;
	// Save tick count when sent&lt;br /&gt;
	echoReq.dwTime				= GetTickCount();&lt;br /&gt;
&lt;br /&gt;
	// Put data in packet and compute checksum&lt;br /&gt;
	echoReq.icmpHdr.Checksum = in_cksum((u_short *)&amp;amp;echoReq, sizeof(ECHOREQUEST));&lt;br /&gt;
&lt;br /&gt;
	// Send the echo request  								  &lt;br /&gt;
	nRet = sendto(s,						/* socket */&lt;br /&gt;
				 (LPSTR)&amp;amp;echoReq,			/* buffer */&lt;br /&gt;
				 sizeof(ECHOREQUEST),&lt;br /&gt;
				 0,							/* flags */&lt;br /&gt;
				 (LPSOCKADDR)lpstToAddr, /* destination */&lt;br /&gt;
				 sizeof(SOCKADDR_IN));   /* address length */&lt;br /&gt;
&lt;br /&gt;
	if (nRet == SOCKET_ERROR) &lt;br /&gt;
		ReportError(&amp;quot;sendto()&amp;quot;);&lt;br /&gt;
	return (nRet);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// RecvEchoReply()&lt;br /&gt;
// Receive incoming data&lt;br /&gt;
// and parse out fields&lt;br /&gt;
DWORD RecvEchoReply(SOCKET s, LPSOCKADDR_IN lpsaFrom, u_char *pTTL) &lt;br /&gt;
{&lt;br /&gt;
	ECHOREPLY echoReply;&lt;br /&gt;
	int nRet;&lt;br /&gt;
	int nAddrLen = sizeof(struct sockaddr_in);&lt;br /&gt;
&lt;br /&gt;
	// Receive the echo reply	&lt;br /&gt;
	nRet = recvfrom(s,					// socket&lt;br /&gt;
					(LPSTR)&amp;amp;echoReply,	// buffer&lt;br /&gt;
					sizeof(ECHOREPLY),	// size of buffer&lt;br /&gt;
					0,					// flags&lt;br /&gt;
					(LPSOCKADDR)lpsaFrom,	// From address&lt;br /&gt;
					&amp;amp;nAddrLen);			// pointer to address len&lt;br /&gt;
&lt;br /&gt;
	// Check return value&lt;br /&gt;
	if (nRet == SOCKET_ERROR) &lt;br /&gt;
		ReportError(&amp;quot;recvfrom()&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	// return time sent and IP TTL&lt;br /&gt;
	*pTTL = echoReply.ipHdr.TTL;&lt;br /&gt;
	return(echoReply.echoRequest.dwTime);   		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// What happened?&lt;br /&gt;
void ReportError(LPCSTR pWhere)&lt;br /&gt;
{&lt;br /&gt;
	fprintf(stderr,&amp;quot;\n%s error: %d\n&amp;quot;,&lt;br /&gt;
		WSAGetLastError());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// WaitForEchoReply()&lt;br /&gt;
// Use select() to determine when&lt;br /&gt;
// data is waiting to be read&lt;br /&gt;
int WaitForEchoReply(SOCKET s)&lt;br /&gt;
{&lt;br /&gt;
	struct timeval Timeout;&lt;br /&gt;
	fd_set readfds;&lt;br /&gt;
&lt;br /&gt;
	readfds.fd_count = 1;&lt;br /&gt;
	readfds.fd_array[0] = s;&lt;br /&gt;
	Timeout.tv_sec = 5;&lt;br /&gt;
    Timeout.tv_usec = 0;&lt;br /&gt;
&lt;br /&gt;
	return(select(1, &amp;amp;readfds, NULL, NULL, &amp;amp;Timeout));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
// Mike Muuss&amp;#039; in_cksum() function&lt;br /&gt;
// and his comments from the original&lt;br /&gt;
// ping program&lt;br /&gt;
//&lt;br /&gt;
// * Author -&lt;br /&gt;
// *	Mike Muuss&lt;br /&gt;
// *	U. S. Army Ballistic Research Laboratory&lt;br /&gt;
// *	December, 1983&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 *			I N _ C K S U M&lt;br /&gt;
 *&lt;br /&gt;
 * Checksum routine for Internet Protocol family headers (C Version)&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
u_short in_cksum(u_short *addr, int len)&lt;br /&gt;
{&lt;br /&gt;
	register int nleft = len;&lt;br /&gt;
	register u_short *w = addr;&lt;br /&gt;
	register u_short answer;&lt;br /&gt;
	register int sum = 0;&lt;br /&gt;
&lt;br /&gt;
	/*&lt;br /&gt;
	 *  Our algorithm is simple, using a 32 bit accumulator (sum),&lt;br /&gt;
	 *  we add sequential 16 bit words to it, and at the end, fold&lt;br /&gt;
	 *  back all the carry bits from the top 16 bits into the lower&lt;br /&gt;
	 *  16 bits.&lt;br /&gt;
	 */&lt;br /&gt;
	while( nleft &amp;gt; 1 )  {&lt;br /&gt;
		sum += *w++;&lt;br /&gt;
		nleft -= 2;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/* mop up an odd byte, if necessary */&lt;br /&gt;
	if( nleft == 1 ) {&lt;br /&gt;
		u_short	u = 0;&lt;br /&gt;
&lt;br /&gt;
		*(u_char *)(&amp;amp;u) = *(u_char *)w ;&lt;br /&gt;
		sum += u;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/*&lt;br /&gt;
	 * add back carry outs from top 16 bits to low 16 bits&lt;br /&gt;
	 */&lt;br /&gt;
	sum = (sum &amp;gt;&amp;gt; 16) + (sum &amp;amp; 0xffff);	/* add hi 16 to low 16 */&lt;br /&gt;
	sum += (sum &amp;gt;&amp;gt; 16);			/* add carry */&lt;br /&gt;
	answer = ~sum;				/* truncate to 16 bits */&lt;br /&gt;
	return (answer);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
</feed>