hi-world cup
Hi,
Clients can't connect to our system. I compiled icecast 2.3.0 from svn, tried the official 2.3.0 src dist, went back to 2.3.0rc3, to no avail.
We're still running MacOSX 10.3.9 aka Panther due to issues with 10.4.x aka Tiger. I can't prove it but the update from 10.3.8 to 10.3.9+securityfixes might have something to do with it, but we're stuck with 10.3.9 for the time being. I do remember when we had 10.3.8, we were successfully using icecast 2.2.0 and 2.3.0rc1 when it came out (both compiled myself with similar gcc/ld settings).
We're listed on the YPs as SciFi.homeip.net on Friday and Saturday nights U.S. time; maybe we can schedule some test time per feedback from this ticket.
We're running icecast by relaying the stream from localhost:32720 which is shoutcast 1.9.6b (a fix for MacOSX users which is the port number going negative when set above 32767). btw We use high port numbers to skirt around ISP possibly blocking the usual ones, and we have net.sysctl settings to make sure other apps don't use those ranges up there.
Listeners to our shoutcast streams are working, as are p2p-radio and Peercast, which I also compiled myself from cvs/svn as appropriate. Every netcast app works but icecast for the time being, and I can't figure out why.
There is no firewall (software, hardware, or otherwise) between the Mac and the cable modem.
Here is a snip from our icecast error.log for tonight's netcast:
[...]
[2005-11-05 19:15:20] INFO main/main Icecast 2.3.0 server started
[2005-11-05 19:15:20] INFO yp/yp_recheck_config Adding new YP server "http://dir.xiph.org/cgi-bin/yp-cgi" (timeout 15s, default interval 30s)
[2005-11-05 19:15:20] INFO yp/yp_recheck_config Adding new YP server "http://www.steamcast.com/sbin/yp.php" (timeout 15s, default interval 30s)
[2005-11-05 19:15:20] INFO yp/yp_update_thread YP update thread started
[2005-11-05 19:15:20] INFO auth/auth_run_thread Authentication thread started
[2005-11-05 19:15:21] INFO slave/start_relay_stream Starting relayed source at mountpoint "/"
[2005-11-05 19:22:05] WARN client/client_read_bytes source connection has died
[2005-11-05 22:57:26] WARN client/client_read_bytes source connection has died
[2005-11-05 22:57:30] WARN client/client_read_bytes source connection has died
[2005-11-05 23:37:05] WARN client/client_read_bytes source connection has died
[...]
The above is a mix of clients "out there" and myself running iTunes on the localhost. Nothing can get hold of the stream.
There is nothing in the access.log for icecast, so these clients didn't even get the very beginning icy-html stuff.
We have relays-on-demand turned off; I don't think turning it on made any difference.
The shoutcast server did see the initial connection; here is that snip from its log:
<11/05/05@19:15:21> [dest: 127.0.0.1] starting stream (UID: 4)[L: 3]{A: Icecast 2.3.0}(P: 1)
This initial connection didn't use to work either. I had to patch the icecast230 src in the following manner to get this much working:
---cut-here---
--- src/slave.c_orig 2005-09-30 14:39:08 -0500
+++ src/slave.c 2005-09-30 14:39:26 -0500
@@ -174,7 +174,7 @@
{
char *auth_header;
- streamsock = sock_connect_wto (relay->server, relay->port, 30);
+ streamsock = sock_connect_wto (relay->server, relay->port, 0);
if (streamsock == SOCK_ERROR)
{
WARN3("Failed to relay stream from master server, couldn't connect to http://%s:%d%s",
---cut-here---
fwiw I tried this patch to get the client streams working but to no avail:
---cut-here---
--- src/net/sock.c_orig 2005-09-30 21:36:15 -0500
+++ src/net/sock.c 2005-10-01 15:37:40 -0500
@@ -433,7 +433,7 @@
if (!buff) return 0;
if (len <= 0) return 0;
- return recv(sock, buff, len, 0);
+ return recv(sock, buff, len, MSG_WAITALL);
}
/* sock_read_line
---cut-here---
So there's a clue to get the client streams working, but I'm unable to figure it out further. :(
Here is our full icecast.xml (obfuscating the passwords of course ;) ):
--- icecast.xml ---
<icecast>
<limits>
<clients>3</clients>
<sources>1</sources>
<threadpool>25</threadpool>
<queue-size>1048576</queue-size>
<client-timeout>65535</client-timeout>
<header-timeout>65535</header-timeout>
<source-timeout>65535</source-timeout>
<burst-on-connect>1</burst-on-connect>
<burst-size>131072</burst-size>
</limits>
<authentication>
<!-- Sources log in with username 'source' -->
<source-password>(duh!)</source-password>
<!-- Relays log in username 'relay' -->
<relay-password></relay-password>
<!-- Admin logs in with the username given below -->
<admin-user>admin</admin-user>
<admin-password>(duh!)</admin-password>
</authentication>
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
</directory>
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://www.steamcast.com/sbin/yp.php</yp-url>
</directory>
<!--
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://www.oddsock.org/cgi-bin/yp-cgi</yp-url>
</directory>
-->
<!-- This is the manufactured mount name for your shoutcast
compatible stream. Since the shoutcast DSP (and NSV encoder)
cannot specify a mountpoint, you must enter it here -->
<shoutcast-mount>/stream</shoutcast-mount>
<!-- This is the hostname other people will use to connect to your server.
It affects mainly the urls generated by Icecast for playlists and yp
listings. -->
<hostname>SciFi.homeip.net</hostname>
<!-- You MUST define 2 ports, port and port +1,
for Shoutcast-compatibility -->
<listen-socket>
<!-- Configure the shoutcast DSP with *this* port
the shoutcast DSP actually will connect the
encoder to this port + 1 -->
<port>32710</port>
</listen-socket>
<listen-socket>
<!-- This port *must* be one larger than the one defined
above and defined as 'shoutcast-compat' -->
<port>32711</port>
<shoutcast-compat>1</shoutcast-compat>
</listen-socket>
<relays-on-demand>0</relays-on-demand>
<relay>
<server>127.0.0.1</server>
<port>32720</port>
<mount>/</mount>
<local-mount>/</local-mount>
<on-demand>0</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Only define a <mount> section if you want to use advanced options,
like alternative usernames or passwords
-->
<mount>
<mount-name>/</mount-name>
<max-listeners>2</max-listeners>
<no-yp>0</no-yp>
<hidden>0</hidden>
</mount>
<fileserve>1</fileserve>
<paths>
<!-- basedir is only used if chroot is enabled -->
<basedir>/usr/local/share/icecast</basedir>
<!-- Note that if <chroot> is turned on below, these paths must both
be relative to the new root, not the original root -->
<logdir>.</logdir>
<webroot>/usr/local/share/icecast/web</webroot>
<adminroot>/usr/local/share/icecast/admin</adminroot>
<pidfile>/var/run/icecast.pid</pidfile>
<!-- Aliases: treat requests for 'source' path as being for 'dest' path
May be made specific to a port or bound address using the "port"
and "bind-address" attributes.
-->
<!--
<alias source="/foo" dest="/bar"/>
-->
</paths>
<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<loglevel>3</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
</logging>
<!--
<security>
<chroot>0</chroot>
<changeowner>
<user>nobody</user>
<group>nogroup</group>
</changeowner>
</security>
-->
</icecast>
--- end icecast.xml ---
Yes the icecast admin can sign-on and look at all the current settings etc. But no clients can get the stream.
Any help, ideas, tests, etc. I would be greatful.
Thank you.