annotate stream/udp.c @ 34057:418e04046d98

Fix Win32 GUI filename problems. guiInfo.Filename wasn't properly set. It must be allocated and filename must point to it. Reported by Stephen Sheldon, sfsheldo gmail com.
author ib
date Wed, 28 Sep 2011 16:17:35 +0000
parents 0f1b5b68af32
children 4f9bc9acf17e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
1 /*
26737
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
2 * network helpers for UDP connections (originally borrowed from rtp.c)
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
3 *
26737
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
4 * Copyright (C) 2006 Benjamin Zores
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
5 *
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
6 * This file is part of MPlayer.
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
7 *
26737
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
8 * MPlayer is free software; you can redistribute it and/or modify
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
9 * it under the terms of the GNU General Public License as published by
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
11 * (at your option) any later version.
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
12 *
26737
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
13 * MPlayer is distributed in the hope that it will be useful,
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
16 * GNU General Public License for more details.
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
17 *
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
18 * You should have received a copy of the GNU General Public License along
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
19 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
a26e50cae389 Use standard license headers with standard formatting.
diego
parents: 24558
diff changeset
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
21 */
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
22
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
23 #include "config.h"
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
24
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
25 #include <stdlib.h>
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
26 #include <string.h>
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
27 #include <errno.h>
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
28 #include <unistd.h>
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
29 #include <stdlib.h>
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
30 #include <sys/types.h>
19464
3f19764369ac missing header for struct timeval
rfelker
parents: 19330
diff changeset
31 #include <sys/time.h>
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
32 #include <ctype.h>
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
33
28402
c884d17bd005 Convert HAVE_WINSOCK2_H into a 0/1 definition.
diego
parents: 28400
diff changeset
34 #if !HAVE_WINSOCK2_H
27472
c0b233cd30ca Revert moving closesocket definition and network headers to network.h.
diego
parents: 27464
diff changeset
35 #include <netdb.h>
c0b233cd30ca Revert moving closesocket definition and network headers to network.h.
diego
parents: 27464
diff changeset
36 #include <netinet/in.h>
c0b233cd30ca Revert moving closesocket definition and network headers to network.h.
diego
parents: 27464
diff changeset
37 #include <sys/socket.h>
c0b233cd30ca Revert moving closesocket definition and network headers to network.h.
diego
parents: 27464
diff changeset
38 #include <arpa/inet.h>
c0b233cd30ca Revert moving closesocket definition and network headers to network.h.
diego
parents: 27464
diff changeset
39 #else
c0b233cd30ca Revert moving closesocket definition and network headers to network.h.
diego
parents: 27464
diff changeset
40 #include <winsock2.h>
c0b233cd30ca Revert moving closesocket definition and network headers to network.h.
diego
parents: 27464
diff changeset
41 #include <ws2tcpip.h>
c0b233cd30ca Revert moving closesocket definition and network headers to network.h.
diego
parents: 27464
diff changeset
42 #endif
c0b233cd30ca Revert moving closesocket definition and network headers to network.h.
diego
parents: 27464
diff changeset
43
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
44 #include "mp_msg.h"
27473
ae5da477539e Move '#define closesocket close' preprocessor directive to a common place
diego
parents: 27472
diff changeset
45 #include "network.h"
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
46 #include "url.h"
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
47 #include "udp.h"
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
48
22473
011d1adc0133 optionally reuse the socket if -reuse-socket is selected; patch by Yong Hwan (sio4 users sf net) simplified by me
nicodvb
parents: 19544
diff changeset
49 int reuse_socket=0;
011d1adc0133 optionally reuse the socket if -reuse-socket is selected; patch by Yong Hwan (sio4 users sf net) simplified by me
nicodvb
parents: 19544
diff changeset
50
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
51 /* Start listening on a UDP port. If multicast, join the group. */
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
52 int
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
53 udp_open_socket (URL_t *url)
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
54 {
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
55 int socket_server_fd, rxsockbufsz;
19330
6f58dd7a5520 kill a warning in getsockopt()
ben
parents: 19318
diff changeset
56 int err;
6f58dd7a5520 kill a warning in getsockopt()
ben
parents: 19318
diff changeset
57 socklen_t err_len;
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
58 fd_set set;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
59 struct sockaddr_in server_address;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
60 struct ip_mreq mcast;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
61 struct timeval tv;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
62 struct hostent *hp;
22473
011d1adc0133 optionally reuse the socket if -reuse-socket is selected; patch by Yong Hwan (sio4 users sf net) simplified by me
nicodvb
parents: 19544
diff changeset
63 int reuse=reuse_socket;
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
64
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
65 mp_msg (MSGT_NETWORK, MSGL_V,
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
66 "Listening for traffic on %s:%d ...\n", url->hostname, url->port);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
67
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
68 socket_server_fd = socket (AF_INET, SOCK_DGRAM, 0);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
69 if (socket_server_fd == -1)
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
70 {
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
71 mp_msg (MSGT_NETWORK, MSGL_ERR, "Failed to create socket\n");
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
72 return -1;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
73 }
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
74
28697
5b749a93fc89 Use memset to make sure all parts of struct sockaddr_in are always initialized.
reimar
parents: 28404
diff changeset
75 memset(&server_address, 0, sizeof(server_address));
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
76 if (isalpha (url->hostname[0]))
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
77 {
28402
c884d17bd005 Convert HAVE_WINSOCK2_H into a 0/1 definition.
diego
parents: 28400
diff changeset
78 #if !HAVE_WINSOCK2_H
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
79 hp = (struct hostent *) gethostbyname (url->hostname);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
80 if (!hp)
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
81 {
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
82 mp_msg (MSGT_NETWORK, MSGL_ERR,
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
83 "Counldn't resolve name: %s\n", url->hostname);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
84 closesocket (socket_server_fd);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
85 return -1;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
86 }
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
87 memcpy ((void *) &server_address.sin_addr.s_addr,
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
88 (void *) hp->h_addr_list[0], hp->h_length);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
89 #else
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
90 server_address.sin_addr.s_addr = htonl (INADDR_ANY);
27461
5a30f5bc23a0 Rename HAVE_WINSOCK preprocessor condition to HAVE_WINSOCK_H.
diego
parents: 27359
diff changeset
91 #endif /* HAVE_WINSOCK2_H */
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
92 }
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
93 else
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
94 {
28404
613f075b4ef0 Restructure network tests: Always check for both inet_aton and inet_pton.
diego
parents: 28402
diff changeset
95 #if HAVE_INET_PTON
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
96 inet_pton (AF_INET, url->hostname, &server_address.sin_addr);
28404
613f075b4ef0 Restructure network tests: Always check for both inet_aton and inet_pton.
diego
parents: 28402
diff changeset
97 #elif HAVE_INET_ATON
613f075b4ef0 Restructure network tests: Always check for both inet_aton and inet_pton.
diego
parents: 28402
diff changeset
98 inet_aton (url->hostname, &server_address.sin_addr);
613f075b4ef0 Restructure network tests: Always check for both inet_aton and inet_pton.
diego
parents: 28402
diff changeset
99 #elif !HAVE_WINSOCK2_H
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
100 server_address.sin_addr.s_addr = htonl(INADDR_ANY);
28404
613f075b4ef0 Restructure network tests: Always check for both inet_aton and inet_pton.
diego
parents: 28402
diff changeset
101 #endif
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
102 }
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
103 server_address.sin_family = AF_INET;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
104 server_address.sin_port = htons (url->port);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
105
22473
011d1adc0133 optionally reuse the socket if -reuse-socket is selected; patch by Yong Hwan (sio4 users sf net) simplified by me
nicodvb
parents: 19544
diff changeset
106 if(reuse_socket && setsockopt(socket_server_fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)))
011d1adc0133 optionally reuse the socket if -reuse-socket is selected; patch by Yong Hwan (sio4 users sf net) simplified by me
nicodvb
parents: 19544
diff changeset
107 mp_msg(MSGT_NETWORK, MSGL_ERR, "SO_REUSEADDR failed! ignore.\n");
011d1adc0133 optionally reuse the socket if -reuse-socket is selected; patch by Yong Hwan (sio4 users sf net) simplified by me
nicodvb
parents: 19544
diff changeset
108
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
109 if (bind (socket_server_fd, (struct sockaddr *) &server_address,
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
110 sizeof (server_address)) == -1)
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
111 {
28402
c884d17bd005 Convert HAVE_WINSOCK2_H into a 0/1 definition.
diego
parents: 28400
diff changeset
112 #if !HAVE_WINSOCK2_H
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
113 if (errno != EINPROGRESS)
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
114 #else
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
115 if (WSAGetLastError () != WSAEINPROGRESS)
27461
5a30f5bc23a0 Rename HAVE_WINSOCK preprocessor condition to HAVE_WINSOCK_H.
diego
parents: 27359
diff changeset
116 #endif /* HAVE_WINSOCK2_H */
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
117 {
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
118 mp_msg (MSGT_NETWORK, MSGL_ERR, "Failed to connect to server\n");
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
119 closesocket (socket_server_fd);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
120 return -1;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
121 }
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
122 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28697
diff changeset
123
28402
c884d17bd005 Convert HAVE_WINSOCK2_H into a 0/1 definition.
diego
parents: 28400
diff changeset
124 #if HAVE_WINSOCK2_H
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
125 if (isalpha (url->hostname[0]))
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
126 {
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
127 hp = (struct hostent *) gethostbyname (url->hostname);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
128 if (!hp)
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
129 {
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
130 mp_msg (MSGT_NETWORK, MSGL_ERR,
24558
97eaba07ef9d Fix a few typos
reimar
parents: 24026
diff changeset
131 "Could not resolve name: %s\n", url->hostname);
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
132 closesocket (socket_server_fd);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
133 return -1;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
134 }
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
135 memcpy ((void *) &server_address.sin_addr.s_addr,
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
136 (void *) hp->h_addr, hp->h_length);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
137 }
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
138 else
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
139 {
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
140 unsigned int addr = inet_addr (url->hostname);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
141 memcpy ((void *) &server_address.sin_addr, (void *) &addr, sizeof (addr));
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
142 }
27461
5a30f5bc23a0 Rename HAVE_WINSOCK preprocessor condition to HAVE_WINSOCK_H.
diego
parents: 27359
diff changeset
143 #endif /* HAVE_WINSOCK2_H */
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
144
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
145 /* Increase the socket rx buffer size to maximum -- this is UDP */
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
146 rxsockbufsz = 240 * 1024;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
147 if (setsockopt (socket_server_fd, SOL_SOCKET, SO_RCVBUF,
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
148 &rxsockbufsz, sizeof (rxsockbufsz)))
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
149 {
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
150 mp_msg (MSGT_NETWORK, MSGL_ERR,
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
151 "Couldn't set receive socket buffer size\n");
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
152 }
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
153
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
154 if ((ntohl (server_address.sin_addr.s_addr) >> 28) == 0xe)
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
155 {
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
156 mcast.imr_multiaddr.s_addr = server_address.sin_addr.s_addr;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
157 mcast.imr_interface.s_addr = 0;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
158
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
159 if (setsockopt (socket_server_fd, IPPROTO_IP,
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
160 IP_ADD_MEMBERSHIP, &mcast, sizeof (mcast)))
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
161 {
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
162 mp_msg (MSGT_NETWORK, MSGL_ERR, "IP_ADD_MEMBERSHIP failed (do you have multicasting enabled in your kernel?)\n");
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
163 closesocket (socket_server_fd);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
164 return -1;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
165 }
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
166 }
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
167
24026
dec604030d92 Fix UDP select timeout.
diego
parents: 22473
diff changeset
168 tv.tv_sec = 1; /* 1 second timeout */
dec604030d92 Fix UDP select timeout.
diego
parents: 22473
diff changeset
169 tv.tv_usec = 0;
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
170
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
171 FD_ZERO (&set);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
172 FD_SET (socket_server_fd, &set);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28697
diff changeset
173
19318
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
174 err = select (socket_server_fd + 1, &set, NULL, NULL, &tv);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
175 if (err < 0)
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
176 {
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
177 mp_msg (MSGT_NETWORK, MSGL_FATAL,
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
178 "Select failed: %s\n", strerror (errno));
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
179 closesocket (socket_server_fd);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
180 return -1;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
181 }
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
182
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
183 if (err == 0)
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
184 {
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
185 mp_msg (MSGT_NETWORK, MSGL_ERR,
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
186 "Timeout! No data from host %s\n", url->hostname);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
187 closesocket (socket_server_fd);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
188 return -1;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
189 }
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
190
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
191 err_len = sizeof (err);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
192 getsockopt (socket_server_fd, SOL_SOCKET, SO_ERROR, &err, &err_len);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
193 if (err)
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
194 {
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
195 mp_msg (MSGT_NETWORK, MSGL_DBG2, "Socket error: %d\n", err);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
196 closesocket (socket_server_fd);
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
197 return -1;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
198 }
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
199
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
200 return socket_server_fd;
a3ddd3320b47 removed udp socket creation code from rtp stack to a new dedicated udp helper file
ben
parents:
diff changeset
201 }