<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[socket verwaltung]]></title><description><![CDATA[<p>hi,<br />
ich suche zur zeit ein ping modul.<br />
hab mir fremden code bis jetzt nur fehler verursacht. deshalb schrieb ich meine eigene ping klasse.<br />
eine range wird angepingt mit ca. 10 threads.</p>
<p>folgendes ergebnis.</p>
<pre><code class="language-cpp">socket: 828 213.147.1.38   213.147.1.41   -
socket: 844 213.147.1.38   213.147.1.40   -
socket: 860 213.147.1.38   213.147.1.39   -
socket: 876 213.147.1.38   213.147.1.38   1
socket: 828 213.147.1.41   213.147.1.45   -
socket: 844 213.147.1.41   213.147.1.44   -
socket: 860 213.147.1.41   213.147.1.43   -
socket: 876 213.147.1.41   213.147.1.42   -
socket: 828 213.147.1.45   213.147.1.48   -
socket: 844 213.147.1.45   213.147.1.47   -
socket: 860 213.147.1.45   213.147.1.46   -
socket: 860 213.147.1.40   213.147.1.49   -
</code></pre>
<p>socket: 876 213.147.1.38 213.147.1.38 1<br />
&lt;socketid&gt; &lt;antwort von&gt; &lt;request gesendet an&gt; &lt;lebt?&gt;</p>
<p>nun sieht ihr an der tabelle oben das da was faul ist.<br />
wieso haben 4 verschiedene sockets die ip eines serves?<br />
ein thread pingt die ip 213.147.1.44 an und bekommt die antwort von 213.147.1.41. das versteh ich nicht.</p>
<p>gruß xerxes</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/83276/socket-verwaltung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 16:44:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/83276.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 19 Aug 2004 09:04:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to socket verwaltung on Thu, 19 Aug 2004 09:04:51 GMT]]></title><description><![CDATA[<p>hi,<br />
ich suche zur zeit ein ping modul.<br />
hab mir fremden code bis jetzt nur fehler verursacht. deshalb schrieb ich meine eigene ping klasse.<br />
eine range wird angepingt mit ca. 10 threads.</p>
<p>folgendes ergebnis.</p>
<pre><code class="language-cpp">socket: 828 213.147.1.38   213.147.1.41   -
socket: 844 213.147.1.38   213.147.1.40   -
socket: 860 213.147.1.38   213.147.1.39   -
socket: 876 213.147.1.38   213.147.1.38   1
socket: 828 213.147.1.41   213.147.1.45   -
socket: 844 213.147.1.41   213.147.1.44   -
socket: 860 213.147.1.41   213.147.1.43   -
socket: 876 213.147.1.41   213.147.1.42   -
socket: 828 213.147.1.45   213.147.1.48   -
socket: 844 213.147.1.45   213.147.1.47   -
socket: 860 213.147.1.45   213.147.1.46   -
socket: 860 213.147.1.40   213.147.1.49   -
</code></pre>
<p>socket: 876 213.147.1.38 213.147.1.38 1<br />
&lt;socketid&gt; &lt;antwort von&gt; &lt;request gesendet an&gt; &lt;lebt?&gt;</p>
<p>nun sieht ihr an der tabelle oben das da was faul ist.<br />
wieso haben 4 verschiedene sockets die ip eines serves?<br />
ein thread pingt die ip 213.147.1.44 an und bekommt die antwort von 213.147.1.41. das versteh ich nicht.</p>
<p>gruß xerxes</p>
]]></description><link>https://www.c-plusplus.net/forum/post/586088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/586088</guid><dc:creator><![CDATA[xerxes_]]></dc:creator><pubDate>Thu, 19 Aug 2004 09:04:51 GMT</pubDate></item><item><title><![CDATA[Reply to socket verwaltung on Thu, 19 Aug 2004 09:12:04 GMT]]></title><description><![CDATA[<p>post mal deinen code mit der ping klasse usw..</p>
<p>cu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/586098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/586098</guid><dc:creator><![CDATA[winsock_user]]></dc:creator><pubDate>Thu, 19 Aug 2004 09:12:04 GMT</pubDate></item><item><title><![CDATA[Reply to socket verwaltung on Thu, 19 Aug 2004 09:16:45 GMT]]></title><description><![CDATA[<p>du hast ja 10 threads, die arbeiten parallel<br />
wenn du also alle ips da gleichzeitig anpingst....dann bekommst du je nach dem welcher server schneller antwortet das ergebniss...oder????</p>
<p>cu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/586103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/586103</guid><dc:creator><![CDATA[winsock_user]]></dc:creator><pubDate>Thu, 19 Aug 2004 09:16:45 GMT</pubDate></item><item><title><![CDATA[Reply to socket verwaltung on Thu, 19 Aug 2004 11:02:49 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;iostream.h&gt;

#include &quot;icmp.h&quot;

using namespace std;

#define ICMP_ECHOREPLY                 0
#define ICMP_UNREACHABLE               3
#define ICMP_ECHO                      8

// 0 = Netz nicht erreichbar
#define ICMP_CODE_NETWORK_UNREACHABLE  0
// 1 = Rechner nicht erreichbar
#define ICMP_CODE_HOST_UNREACHABLE     1

// Minimalgrösse 8 Byte
#define ICMP_MIN            8

#define STATUS_FAILED       0xFFFF
#define DEF_PACKET_SIZE     32
#define MAX_PACKET          65000 

int ICMP_::echo_ex(string ip)
{  
  SOCKADDR_IN addrDest;
  SOCKADDR_IN addrFrom;
  int addrFromLen = sizeof(addrFrom);
  HOSTENT* ptrHostent;
  unsigned long datasize;
  int RecvTimeout = 1000;
  char *dest_ip;
  char *icmp_data;
  char *recvbuf;
  unsigned int addr=0;
  unsigned short seq_no = 0;
  int BytesReceived;
  int BytesSent;
  long rc;
  unsigned ping_anzahl=0;

  sockRaw = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
  if (sockRaw == INVALID_SOCKET)
  {

  }
  rc = setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&amp;RecvTimeout, sizeof(RecvTimeout));
  if(rc == SOCKET_ERROR)
  {

  }

	memset(&amp;addrDest,0,sizeof(SOCKADDR_IN)); 
	addrDest.sin_addr.s_addr = inet_addr(ip.c_str());
    addrDest.sin_family = AF_INET;

    //dest_ip = inet_ntoa(addrDest.sin_addr);

  // Gröss des Datenpaketes
  datasize = 32;

  if (datasize == 0)
  {
     datasize = DEF_PACKET_SIZE;
  }

  if (datasize &gt; MAX_PACKET)
  {
     datasize = DEF_PACKET_SIZE;
  }
  datasize += sizeof(ICMP_HEADER); 
  icmp_data = (char*)malloc(MAX_PACKET);
  recvbuf = (char*)malloc(MAX_PACKET+sizeof(IP_HEADER)+sizeof(ICMP_HEADER));

  if (!icmp_data || !recvbuf)
  {

  }

  FillIcmpData(icmp_data, datasize);

    ((ICMP_HEADER*)icmp_data)-&gt;i_cksum = 0;
    ((ICMP_HEADER*)icmp_data)-&gt;timestamp = GetTickCount();

    ((ICMP_HEADER*)icmp_data)-&gt;i_seq = seq_no++;
    ((ICMP_HEADER*)icmp_data)-&gt;i_cksum = checksum((unsigned short*)icmp_data, datasize);

    BytesSent = sendto(sockRaw,icmp_data,datasize,0,(SOCKADDR*)&amp;addrDest, sizeof(addrDest));

    if (BytesSent == SOCKET_ERROR)
    {
      if (WSAGetLastError() == WSAETIMEDOUT)
      {
      }

    }
    if (BytesSent &lt; datasize )
    {
   }
    BytesReceived = recvfrom(sockRaw,recvbuf,MAX_PACKET+sizeof(IP_HEADER)+sizeof(ICMP_HEADER),0,(SOCKADDR*)&amp;addrFrom, &amp;addrFromLen);   	
	cur_ip = inet_ntoa(addrFrom.sin_addr);
	if(!ip.find(inet_ntoa(addrFrom.sin_addr))){
		if (BytesReceived == SOCKET_ERROR){
			if (WSAGetLastError() == WSAETIMEDOUT){
				//return 1;
			}
			closesocket(sockRaw);	
			return 1;
		} else{
			closesocket(sockRaw);	
			return 0;
		}
	}
	closesocket(sockRaw);	
  return 1;
}

unsigned short ICMP_::checksum(unsigned short *buffer, int size)
{
  unsigned long cksum=0;
  while(size &gt;1)
  {
    cksum+=*buffer++;
    size -=sizeof(unsigned short);
  }

  if(size)
  {
    cksum += *(unsigned char*)buffer;
  }

  cksum = (cksum &gt;&gt; 16) + (cksum &amp; 0xffff);
  cksum += (cksum &gt;&gt;16);
  return (unsigned short)(~cksum);
}

void ICMP_::FillIcmpData(char *icmp_data, int datasize)
{
  ICMP_HEADER *icmp_hdr;
  char *datapart;

  icmp_hdr = (ICMP_HEADER*)icmp_data;

  icmp_hdr-&gt;i_type = ICMP_ECHO;
  icmp_hdr-&gt;i_code = 0;
  icmp_hdr-&gt;i_id = cur_proc_addr;
  icmp_hdr-&gt;i_cksum = 0;
  icmp_hdr-&gt;i_seq = 0;

  datapart = icmp_data + sizeof(ICMP_HEADER);
  // Den Buffer mit etwas füllen
  memset(datapart,'C', datasize - sizeof(ICMP_HEADER));
}
</code></pre>
<blockquote>
<p>du hast ja 10 threads, die arbeiten parallel<br />
wenn du also alle ips da gleichzeitig anpingst....dann bekommst du je nach dem welcher server schneller antwortet das ergebniss...oder????</p>
</blockquote>
<p>jeder thread wird bedient. der fall das mehrer threads die gleiche ip auflösen, tritt nie ein. ich finde es komisch, das mehrere sockets das ergebnis einer anderen anfrage bekommen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/586191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/586191</guid><dc:creator><![CDATA[xerxes_]]></dc:creator><pubDate>Thu, 19 Aug 2004 11:02:49 GMT</pubDate></item><item><title><![CDATA[Reply to socket verwaltung on Thu, 19 Aug 2004 12:11:44 GMT]]></title><description><![CDATA[<p>hast du auch die ausgabe synchronisiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/586264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/586264</guid><dc:creator><![CDATA[synchronisiert]]></dc:creator><pubDate>Thu, 19 Aug 2004 12:11:44 GMT</pubDate></item><item><title><![CDATA[Reply to socket verwaltung on Thu, 19 Aug 2004 12:22:20 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">LONG crit_sec = false; 

DWORD WINAPI process(LPVOID lp_para)
{
	THREAD *t = (THREAD*)lp_para;	

	DWORD cur_proc_addr = GetCurrentThreadId();
	ICMP_ *icmp = new ICMP_((unsigned short)cur_proc_addr);

	while(!t-&gt;get_term()){
		if(t-&gt;get_work_state()){	
			int res;
			res = icmp-&gt;echo_ex(t-&gt;get_ip());
			string tmp;

			if(!res){
				enter();				
				 tmp = &quot;   &quot; + t-&gt;get_ip() + &quot; -&gt;     1\n&quot;; 
				 fputs(tmp.c_str(), file);
				 cout &lt;&lt; &quot;&gt; &quot;;
				 cout &lt;&lt; tmp;				 
				leave();
			} else{
				enter();				
				 tmp = &quot;   &quot; + t-&gt;get_ip() + &quot; -&gt;     -\n&quot;; 
				 fputs(tmp.c_str(), file);
				 cout &lt;&lt; &quot;&gt; &quot;;
				 cout &lt;&lt; tmp;
				leave();
			}

			t-&gt;set_work_state(false);
		}

		Sleep(1);
	}
	return ((DWORD) lp_para);
}

void enter(void)
{
   while(InterlockedExchange(&amp;crit_sec, true) != false)
      Sleep(0); 
}

void leave(void)
{
   InterlockedExchange(&amp;crit_sec, false); 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/586272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/586272</guid><dc:creator><![CDATA[xerxes_]]></dc:creator><pubDate>Thu, 19 Aug 2004 12:22:20 GMT</pubDate></item></channel></rss>