<?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[[Gelöst-Sockets] bind() unter linux funktioniert nicht?]]></title><description><![CDATA[<p>Hi.<br />
Ich habe mal eine Klasse für Sockets geschrieben (naja, gut, dass manche Bücher fertigen Code bereitstellen =D). Ich habe den Code nur minimal verändert. Im Buch waren immer jeweils die Windows und Unix varianten angegeben.</p>
<pre><code class="language-cpp">void Socket::bind(int port) {
    if (!valid) throw new SockEx(SockEx::cINVALID);
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = INADDR_ANY;
    addr.sin_port = htons(port);

    int r = ::bind(sodex, (sockaddr*)&amp;addr, sizeof(addr)); // giebt -1 zurück, aber warum?!
    if (r &lt; 0) throw new SockEx(SockEx::cFAIL);
}
</code></pre>
<p>Output:</p>
<blockquote>
<p>2 <em>&lt; Das ist SockEx::cFAIL</em><br />
terminate called after throwing an instance of 'SockEx*'<br />
Aborted<br />
Press [Enter] to close the terminal ...</p>
</blockquote>
<p>sodex ist der socket deskriptor (socket + index <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 />
addr ist sockaddr_in<br />
SockEx eine sehr simple exception klasse<br />
Ich benutze Netbeans 6.9 auf Linux ubuntu 10.04</p>
<p>Danke im Voraus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270772/gelöst-sockets-bind-unter-linux-funktioniert-nicht</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 23:03:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270772.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 17 Jul 2010 22:13:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Gelöst-Sockets] bind() unter linux funktioniert nicht? on Sat, 17 Jul 2010 22:19:23 GMT]]></title><description><![CDATA[<p>Hi.<br />
Ich habe mal eine Klasse für Sockets geschrieben (naja, gut, dass manche Bücher fertigen Code bereitstellen =D). Ich habe den Code nur minimal verändert. Im Buch waren immer jeweils die Windows und Unix varianten angegeben.</p>
<pre><code class="language-cpp">void Socket::bind(int port) {
    if (!valid) throw new SockEx(SockEx::cINVALID);
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = INADDR_ANY;
    addr.sin_port = htons(port);

    int r = ::bind(sodex, (sockaddr*)&amp;addr, sizeof(addr)); // giebt -1 zurück, aber warum?!
    if (r &lt; 0) throw new SockEx(SockEx::cFAIL);
}
</code></pre>
<p>Output:</p>
<blockquote>
<p>2 <em>&lt; Das ist SockEx::cFAIL</em><br />
terminate called after throwing an instance of 'SockEx*'<br />
Aborted<br />
Press [Enter] to close the terminal ...</p>
</blockquote>
<p>sodex ist der socket deskriptor (socket + index <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 />
addr ist sockaddr_in<br />
SockEx eine sehr simple exception klasse<br />
Ich benutze Netbeans 6.9 auf Linux ubuntu 10.04</p>
<p>Danke im Voraus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927876</guid><dc:creator><![CDATA[lk]]></dc:creator><pubDate>Sat, 17 Jul 2010 22:19:23 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst-Sockets] bind() unter linux funktioniert nicht? on Sat, 17 Jul 2010 22:15:50 GMT]]></title><description><![CDATA[<p>Eventuell ist der Port bereits belegt. Versuch einen Port über 1024.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927880</guid><dc:creator><![CDATA[..........]]></dc:creator><pubDate>Sat, 17 Jul 2010 22:15:50 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst-Sockets] bind() unter linux funktioniert nicht? on Sat, 17 Jul 2010 22:17:33 GMT]]></title><description><![CDATA[<p>Ach, im übrigen solltest du die Struktur auch mit <code>memset(&amp;addr, 0, sizeof(addr));</code> auf 0 setzen:</p>
<pre><code class="language-cpp">void Socket::bind(int port) {
    if (!valid) throw new SockEx(SockEx::cINVALID);

    memset(&amp;addr, 0, sizeof(addr));  // &lt;---

    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = INADDR_ANY;
    addr.sin_port = htons(port);

    int r = ::bind(sodex, (sockaddr*)&amp;addr, sizeof(addr));

    if (r &lt; 0) throw new SockEx(SockEx::cFAIL);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1927882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927882</guid><dc:creator><![CDATA[..........]]></dc:creator><pubDate>Sat, 17 Jul 2010 22:17:33 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst-Sockets] bind() unter linux funktioniert nicht? on Sat, 17 Jul 2010 22:19:04 GMT]]></title><description><![CDATA[<p>Ich blödmann. Danke. =|</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927883</guid><dc:creator><![CDATA[lk]]></dc:creator><pubDate>Sat, 17 Jul 2010 22:19:04 GMT</pubDate></item><item><title><![CDATA[Reply to [Gelöst-Sockets] bind() unter linux funktioniert nicht? on Sun, 18 Jul 2010 07:57:03 GMT]]></title><description><![CDATA[<p>lk schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void Socket::bind(int port) {
    if (!valid) throw new SockEx(SockEx::cINVALID);
...
}
</code></pre>
</blockquote>
<p>In C++ sollte man keine mit new allokierten Objekte als Excption werfen. Besser ist:</p>
<pre><code class="language-cpp">void Socket::bind(int port) {
    if (!valid) throw SockEx(SockEx::cINVALID);
...
}
</code></pre>
<p>und später</p>
<pre><code class="language-cpp">try {
  s.bind( 42 );
}
catch( const SockEx&amp; ex ) {
...
}
</code></pre>
<p>Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1927950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1927950</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 18 Jul 2010 07:57:03 GMT</pubDate></item></channel></rss>