<?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[MaximalTraffic]]></title><description><![CDATA[<p>Grüße !</p>
<p>Ich transportiere binarisierte Schwellwertbilder einer Zeilenkamera über<br />
Ethernet -Karten hier verwende ich direkt das Socket32 Gerät.<br />
Alle Daten werden mit Zip Komprimiert. (schalter BESTSPEED)</p>
<p>Ich habe nun neue Netzwerkarten(NetGear Gigabit) mit einen Router von<br />
(NetGear Gigabit) alles in einem &quot;geschlossenen System&quot; Meßgerät.</p>
<p>Bei einem normalen Filetransfer komme ich auf 11~MB/s Das entspricht<br />
dem 1GBit/s Wie kann ich meinen Datentransfer nun auf der<br />
Softwareseite steigern. Ich komme auf ca 4MB/s.</p>
<p>hier meine wieder im bau befindliche WinSock32 Initialisierung:</p>
<pre><code class="language-cpp">bool CMySock::Create(int ListPort,SOCKCALLBACK pC,DWORD UserDat)
{
	Delete();

	m_pcallback  = pC;
    m_UserDat    = UserDat;

    if((m_sock = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)) == INVALID_SOCKET)
    {
        WSACleanup();
        return false;
    }

    int DatMax  = 4096,timeout = 1500, NoDly   = 0;

    if(setsockopt(m_sock,SOL_SOCKET,TCP_NODELAY,(char *)&amp;NoDly,sizeof(int)) == SOCKET_ERROR)
	 return false;

    if(setsockopt(m_sock,SOL_SOCKET,SO_RCVBUF,(char *)&amp;DatMax,sizeof(int)) == SOCKET_ERROR)
	 return false;

    if(setsockopt(m_sock,SOL_SOCKET,SO_SNDBUF,(char *)&amp;DatMax,sizeof(int)) == SOCKET_ERROR)
	 return false;

    if(setsockopt(m_sock,SOL_SOCKET,SO_SNDTIMEO,(char *)&amp;timeout,sizeof(int)) == SOCKET_ERROR)
     return false;

	if(setsockopt(m_sock,SOL_SOCKET,SO_RCVTIMEO,(char *)&amp;timeout,sizeof(int)) == SOCKET_ERROR)
     return false;

	DWORD iMode = 1; ioctlsocket(m_sock, FIONBIO,&amp;iMode);

	if(ListPort)
	{
		SOCKADDR_IN sin;
		sin.sin_family      = PF_INET;
		sin.sin_port        = htons(ListPort);
		sin.sin_addr.s_addr = INADDR_ANY;

		if(bind(m_sock,(LPSOCKADDR)&amp;sin,sizeof(sin)) == SOCKET_ERROR)
		{
			Delete();
			return false;
		}

		if(listen(m_sock, 2) == SOCKET_ERROR)
		{
			Delete();
			return false;
		}

		m_AccThread.Start(Accept,this,THREAD_PRIORITY_NORMAL);
	}

	if(pC &amp;&amp; UserDat)
	 m_RecThread.Start(Receive,this,THREAD_PRIORITY_ABOVE_NORMAL);

    return true;
}
</code></pre>
<p>Mein Reciever Thread lässt ein Sleep(1) stehen um rechenzeit zurück zu geben.<br />
Das müßte doch auch über das Timeout von Recieve möglich sein ?</p>
<pre><code class="language-cpp">DWORD CMySock::Receive(LPVOID pParam)
{
	CThread *pTh((CThread *)pParam);
    CMySock *pC((CMySock *)pTh-&gt;GetClientData());

	char *pMem(0);
	struct sockaddr_in incaddr;
	int addrlen(sizeof(incaddr)),len(sizeof(int)),DatMax(0);
    getsockopt(pC-&gt;m_sock,SOL_SOCKET,SO_RCVBUF,(char *)&amp;DatMax,&amp;len);

	if(DatMax &gt; 0 &amp;&amp; (pMem = new char[DatMax+1]))
	{
		while(!pTh-&gt;IsEnding())
		{
			Sleep(1);

			for(LstSock::iterator it = pC-&gt;m_lstsock.begin(); it != pC-&gt;m_lstsock.end(); it++)
			{ 
				int rVal = recvfrom( (*it)-&gt;GetSocket(), (char *)pMem, DatMax,0,(struct sockaddr *)&amp;incaddr,&amp;addrlen);
				if(rVal == SOCKET_ERROR)
				{
					switch(WSAGetLastError())
					{
					   case WSAENOTCONN://socket not connected
					   case WSAESHUTDOWN://socket has been shut down!
					   case WSAEDISCON:
					   case WSAEWOULDBLOCK:
						    break;
					   case WSAENETRESET:
					   case WSAECONNABORTED:
					   case WSAECONNRESET:
					   case WSAEINVAL:
					   default:
						    break;
					}

 				}else if(rVal &gt; 0) 
				{
				  if(pC-&gt;m_pcallback)	
				   *(pMem+rVal) = 0,pC-&gt;m_pcallback( pMem, rVal, pC-&gt;m_UserDat,(*it)); 
				}else 
				{
				  (*it)-&gt;Delete(); delete (*it); 
				  it = pC-&gt;m_lstsock.erase(it);
				  break;
				}
			}
		}

		delete pMem;
	}

	pTh-&gt;SetEnding();

	return 0;
}
</code></pre>
<p>Danke für Hinweise.<br />
grüße Karsten Schulz<br />
<a href="http://www.kahnsoft.de" rel="nofollow">www.kahnsoft.de</a></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197350/maximaltraffic</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Apr 2026 16:09:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197350.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Nov 2007 13:49:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to MaximalTraffic on Fri, 09 Nov 2007 13:53:27 GMT]]></title><description><![CDATA[<p>Grüße !</p>
<p>Ich transportiere binarisierte Schwellwertbilder einer Zeilenkamera über<br />
Ethernet -Karten hier verwende ich direkt das Socket32 Gerät.<br />
Alle Daten werden mit Zip Komprimiert. (schalter BESTSPEED)</p>
<p>Ich habe nun neue Netzwerkarten(NetGear Gigabit) mit einen Router von<br />
(NetGear Gigabit) alles in einem &quot;geschlossenen System&quot; Meßgerät.</p>
<p>Bei einem normalen Filetransfer komme ich auf 11~MB/s Das entspricht<br />
dem 1GBit/s Wie kann ich meinen Datentransfer nun auf der<br />
Softwareseite steigern. Ich komme auf ca 4MB/s.</p>
<p>hier meine wieder im bau befindliche WinSock32 Initialisierung:</p>
<pre><code class="language-cpp">bool CMySock::Create(int ListPort,SOCKCALLBACK pC,DWORD UserDat)
{
	Delete();

	m_pcallback  = pC;
    m_UserDat    = UserDat;

    if((m_sock = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)) == INVALID_SOCKET)
    {
        WSACleanup();
        return false;
    }

    int DatMax  = 4096,timeout = 1500, NoDly   = 0;

    if(setsockopt(m_sock,SOL_SOCKET,TCP_NODELAY,(char *)&amp;NoDly,sizeof(int)) == SOCKET_ERROR)
	 return false;

    if(setsockopt(m_sock,SOL_SOCKET,SO_RCVBUF,(char *)&amp;DatMax,sizeof(int)) == SOCKET_ERROR)
	 return false;

    if(setsockopt(m_sock,SOL_SOCKET,SO_SNDBUF,(char *)&amp;DatMax,sizeof(int)) == SOCKET_ERROR)
	 return false;

    if(setsockopt(m_sock,SOL_SOCKET,SO_SNDTIMEO,(char *)&amp;timeout,sizeof(int)) == SOCKET_ERROR)
     return false;

	if(setsockopt(m_sock,SOL_SOCKET,SO_RCVTIMEO,(char *)&amp;timeout,sizeof(int)) == SOCKET_ERROR)
     return false;

	DWORD iMode = 1; ioctlsocket(m_sock, FIONBIO,&amp;iMode);

	if(ListPort)
	{
		SOCKADDR_IN sin;
		sin.sin_family      = PF_INET;
		sin.sin_port        = htons(ListPort);
		sin.sin_addr.s_addr = INADDR_ANY;

		if(bind(m_sock,(LPSOCKADDR)&amp;sin,sizeof(sin)) == SOCKET_ERROR)
		{
			Delete();
			return false;
		}

		if(listen(m_sock, 2) == SOCKET_ERROR)
		{
			Delete();
			return false;
		}

		m_AccThread.Start(Accept,this,THREAD_PRIORITY_NORMAL);
	}

	if(pC &amp;&amp; UserDat)
	 m_RecThread.Start(Receive,this,THREAD_PRIORITY_ABOVE_NORMAL);

    return true;
}
</code></pre>
<p>Mein Reciever Thread lässt ein Sleep(1) stehen um rechenzeit zurück zu geben.<br />
Das müßte doch auch über das Timeout von Recieve möglich sein ?</p>
<pre><code class="language-cpp">DWORD CMySock::Receive(LPVOID pParam)
{
	CThread *pTh((CThread *)pParam);
    CMySock *pC((CMySock *)pTh-&gt;GetClientData());

	char *pMem(0);
	struct sockaddr_in incaddr;
	int addrlen(sizeof(incaddr)),len(sizeof(int)),DatMax(0);
    getsockopt(pC-&gt;m_sock,SOL_SOCKET,SO_RCVBUF,(char *)&amp;DatMax,&amp;len);

	if(DatMax &gt; 0 &amp;&amp; (pMem = new char[DatMax+1]))
	{
		while(!pTh-&gt;IsEnding())
		{
			Sleep(1);

			for(LstSock::iterator it = pC-&gt;m_lstsock.begin(); it != pC-&gt;m_lstsock.end(); it++)
			{ 
				int rVal = recvfrom( (*it)-&gt;GetSocket(), (char *)pMem, DatMax,0,(struct sockaddr *)&amp;incaddr,&amp;addrlen);
				if(rVal == SOCKET_ERROR)
				{
					switch(WSAGetLastError())
					{
					   case WSAENOTCONN://socket not connected
					   case WSAESHUTDOWN://socket has been shut down!
					   case WSAEDISCON:
					   case WSAEWOULDBLOCK:
						    break;
					   case WSAENETRESET:
					   case WSAECONNABORTED:
					   case WSAECONNRESET:
					   case WSAEINVAL:
					   default:
						    break;
					}

 				}else if(rVal &gt; 0) 
				{
				  if(pC-&gt;m_pcallback)	
				   *(pMem+rVal) = 0,pC-&gt;m_pcallback( pMem, rVal, pC-&gt;m_UserDat,(*it)); 
				}else 
				{
				  (*it)-&gt;Delete(); delete (*it); 
				  it = pC-&gt;m_lstsock.erase(it);
				  break;
				}
			}
		}

		delete pMem;
	}

	pTh-&gt;SetEnding();

	return 0;
}
</code></pre>
<p>Danke für Hinweise.<br />
grüße Karsten Schulz<br />
<a href="http://www.kahnsoft.de" rel="nofollow">www.kahnsoft.de</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1400319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1400319</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 09 Nov 2007 13:53:27 GMT</pubDate></item></channel></rss>