<?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 spinnt (verhält sich unterschiedlich zwischen 2 rechnern)]]></title><description><![CDATA[<p>folgender code soll eine datei verschicken:</p>
<pre><code class="language-cpp">void sendfile (HANDLE hfile)
{
    char buff[1400];
    DWORD bytes_read;
    SOCKADDR_IN sin;
    SOCKET sock;
    LINGER linger;

    sock = socket (AF_INET, SOCK_STREAM, 0);
    if (sock == INVALID_SOCKET)
        shit (&quot;socket&quot;);

    linger.l_linger = 60;
    linger.l_onoff = 1;
    if (SOCKET_ERROR == setsockopt (sock, SOL_SOCKET, SO_LINGER, (char*)&amp;linger, sizeof(LINGER)))
        shit (&quot;setsockopt(LINGER)&quot;);

    sin.sin_family = AF_INET;
    sin.sin_port = htons (atoi(g_port));
    sin.sin_addr.s_addr = inet_addr (g_ipaddress);
    if (connect (sock, (SOCKADDR*)&amp;sin, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
        shit (&quot;connect&quot;);

    DWORD tid;
    CloseHandle (CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE)receiver_thread, (void*)sock, 0, &amp;tid));

    /*
    char reset[] = {0x12, 0x3f};
    send (sock, reset, 2, 0);
    */

    while (1)
    {
        BOOL res = ReadFile (hfile, buff, 1400, &amp;bytes_read, NULL);
        if (res == 0 || bytes_read == 0)
            break;
        if (SOCKET_ERROR == send (sock, buff, bytes_read, 0))
            shit (&quot;send&quot;);
        Sleep (atoi(g_packetdelay));
        print (&quot;Sending %d bytes\n&quot;, bytes_read);
    }
    Sleep (atoi(g_closingdelay));
    print (&quot;closing socket\n&quot;);
    closesocket (sock);
    print (&quot;closed\n&quot;);
}
</code></pre>
<p>auf der einen kiste macht er's anstandslos. auf einer anderen braucht er die delays (siehe die Sleep()s im code). es scheint so, als würde auf dem anderen rechner die 'send' und 'closesocket'-aufrufe asynchron sein. warum nur?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/104017/socket-spinnt-verhält-sich-unterschiedlich-zwischen-2-rechnern</link><generator>RSS for Node</generator><lastBuildDate>Sat, 02 May 2026 00:25:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/104017.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 Mar 2005 15:22:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to socket spinnt (verhält sich unterschiedlich zwischen 2 rechnern) on Tue, 15 Mar 2005 15:42:01 GMT]]></title><description><![CDATA[<p>folgender code soll eine datei verschicken:</p>
<pre><code class="language-cpp">void sendfile (HANDLE hfile)
{
    char buff[1400];
    DWORD bytes_read;
    SOCKADDR_IN sin;
    SOCKET sock;
    LINGER linger;

    sock = socket (AF_INET, SOCK_STREAM, 0);
    if (sock == INVALID_SOCKET)
        shit (&quot;socket&quot;);

    linger.l_linger = 60;
    linger.l_onoff = 1;
    if (SOCKET_ERROR == setsockopt (sock, SOL_SOCKET, SO_LINGER, (char*)&amp;linger, sizeof(LINGER)))
        shit (&quot;setsockopt(LINGER)&quot;);

    sin.sin_family = AF_INET;
    sin.sin_port = htons (atoi(g_port));
    sin.sin_addr.s_addr = inet_addr (g_ipaddress);
    if (connect (sock, (SOCKADDR*)&amp;sin, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
        shit (&quot;connect&quot;);

    DWORD tid;
    CloseHandle (CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE)receiver_thread, (void*)sock, 0, &amp;tid));

    /*
    char reset[] = {0x12, 0x3f};
    send (sock, reset, 2, 0);
    */

    while (1)
    {
        BOOL res = ReadFile (hfile, buff, 1400, &amp;bytes_read, NULL);
        if (res == 0 || bytes_read == 0)
            break;
        if (SOCKET_ERROR == send (sock, buff, bytes_read, 0))
            shit (&quot;send&quot;);
        Sleep (atoi(g_packetdelay));
        print (&quot;Sending %d bytes\n&quot;, bytes_read);
    }
    Sleep (atoi(g_closingdelay));
    print (&quot;closing socket\n&quot;);
    closesocket (sock);
    print (&quot;closed\n&quot;);
}
</code></pre>
<p>auf der einen kiste macht er's anstandslos. auf einer anderen braucht er die delays (siehe die Sleep()s im code). es scheint so, als würde auf dem anderen rechner die 'send' und 'closesocket'-aufrufe asynchron sein. warum nur?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/745158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/745158</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 15 Mar 2005 15:42:01 GMT</pubDate></item><item><title><![CDATA[Reply to socket spinnt (verhält sich unterschiedlich zwischen 2 rechnern) on Tue, 15 Mar 2005 18:17:58 GMT]]></title><description><![CDATA[<p>send sendet nicht immer alle bytes welche es übergeben bekommt. Die tatsächliche gesendeten anzahl bekommst du aber von der funktion zurückgegeben. Das heißt wenn du 10 bytes senden willst kann es sein das send beim ersten aufruf nur 6 bytes sendet und du die restlichen 4 bytes durch einen erneuten aufruf von send verschickt werden müssen.<br />
-&gt; Also: send (und recv) in einer schleife aufrufen bis die summe der rückgabewerte gleich der größe der zu versendenen daten sind.</p>
<p>Kleines Beispiel: (ungetestet)</p>
<pre><code class="language-cpp">char *buffer = hier_is_irgendwas_drin;
int dataToSend = 10;
int dataSend = 0;
while (dataToSend &gt; 0)
{
    int ret = send(sock,buffer+dataSend,dataToSend,0);
    if (ret &lt; 0)
       return false;
    dataSend += ret;
    dataToSend -= ret;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/745300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/745300</guid><dc:creator><![CDATA[newvet]]></dc:creator><pubDate>Tue, 15 Mar 2005 18:17:58 GMT</pubDate></item><item><title><![CDATA[Reply to socket spinnt (verhält sich unterschiedlich zwischen 2 rechnern) on Tue, 15 Mar 2005 19:00:41 GMT]]></title><description><![CDATA[<p>newvet schrieb:</p>
<blockquote>
<p>send sendet nicht immer alle bytes welche es übergeben bekommt.</p>
</blockquote>
<p>wow, danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
_das_ muss es sein, werd ich morgen gleich nachbessern. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
btw: ich wusste doch, dass da was faul ist. manchmal bin ich einfach zu blöd für die einfachsten sachen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/745349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/745349</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 15 Mar 2005 19:00:41 GMT</pubDate></item></channel></rss>