mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-18 07:47:17 +00:00
gst/udp/: Fix multiudpsink on OSX by passing the specific length of the socket, refactor that into a function shared ...
Original commit message from CVS: * gst/udp/gstmultiudpsink.c: * gst/udp/gstudpnetutils.c: * gst/udp/gstudpnetutils.h: * gst/udp/gstudpsrc.c: Fix multiudpsink on OSX by passing the specific length of the socket, refactor that into a function shared with the same thing in udpsrc.
This commit is contained in:
parent
380b64d670
commit
9b372f1bbd
6 changed files with 33 additions and 15 deletions
|
@ -1,3 +1,12 @@
|
|||
2008-11-20 Michael Smith <msmith@songbirdnest.com>
|
||||
|
||||
* gst/udp/gstmultiudpsink.c:
|
||||
* gst/udp/gstudpnetutils.c:
|
||||
* gst/udp/gstudpnetutils.h:
|
||||
* gst/udp/gstudpsrc.c:
|
||||
Fix multiudpsink on OSX by passing the specific length of the socket,
|
||||
refactor that into a function shared with the same thing in udpsrc.
|
||||
|
||||
2008-11-20 Wim Taymans <wim.taymans@collabora.co.uk>
|
||||
|
||||
* gst/wavparse/gstwavparse.c: (uint64_ceiling_scale_int),
|
||||
|
|
2
common
2
common
|
@ -1 +1 @@
|
|||
Subproject commit edfb4b44ea433b0b83b8a2f27a6e0bcbccdc3f2f
|
||||
Subproject commit e4b2fe44724e1c1a6e816ae4fbbae43d7f68f1ef
|
|
@ -374,6 +374,7 @@ gst_multiudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
|
|||
gint ret, size, num = 0;
|
||||
guint8 *data;
|
||||
GList *clients;
|
||||
gint len;
|
||||
|
||||
sink = GST_MULTIUDPSINK (bsink);
|
||||
|
||||
|
@ -395,12 +396,13 @@ gst_multiudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
|
|||
GST_LOG_OBJECT (sink, "sending %d bytes to client %p", size, client);
|
||||
|
||||
while (TRUE) {
|
||||
len = gst_udp_get_sockaddr_length (&client->theiraddr);
|
||||
#ifdef G_OS_WIN32
|
||||
ret = sendto (*client->sock, (char *) data, size, 0,
|
||||
#else
|
||||
ret = sendto (*client->sock, data, size, 0,
|
||||
#endif
|
||||
(struct sockaddr *) &client->theiraddr, sizeof (client->theiraddr));
|
||||
(struct sockaddr *) &client->theiraddr, len);
|
||||
if (ret < 0) {
|
||||
/* we get a non-posix EPERM on Linux when a firewall rule blocks this
|
||||
* destination. We will simply ignore this. */
|
||||
|
|
|
@ -59,6 +59,23 @@ gst_udp_net_utils_win32_wsa_startup (GstObject * obj)
|
|||
|
||||
#endif
|
||||
|
||||
int
|
||||
gst_udp_get_sockaddr_length (struct sockaddr_storage *addr)
|
||||
{
|
||||
/* MacOS is picky about passing precisely the correct length,
|
||||
* so we calculate it here for the given socket type.
|
||||
*/
|
||||
switch (addr->ss_family) {
|
||||
case AF_INET:
|
||||
return sizeof (struct sockaddr_in);
|
||||
case AF_INET6:
|
||||
return sizeof (struct sockaddr_in6);
|
||||
default:
|
||||
/* don't know, Screw MacOS and use the full length */
|
||||
return sizeof (*addr);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
gst_udp_get_addr (const char *hostname, int port, struct sockaddr_storage *addr)
|
||||
{
|
||||
|
|
|
@ -74,6 +74,8 @@ gboolean gst_udp_net_utils_win32_wsa_startup (GstObject * obj);
|
|||
|
||||
#endif
|
||||
|
||||
int gst_udp_get_sockaddr_length(struct sockaddr_storage *addr);
|
||||
|
||||
int gst_udp_get_addr (const char *hostname, int port, struct sockaddr_storage *addr);
|
||||
int gst_udp_is_multicast (struct sockaddr_storage *addr);
|
||||
|
||||
|
|
|
@ -777,19 +777,7 @@ gst_udpsrc_start (GstBaseSrc * bsrc)
|
|||
|
||||
GST_DEBUG_OBJECT (src, "binding on port %d", src->port);
|
||||
|
||||
/* Mac OS is picky about the size for the bind so we switch on the family */
|
||||
switch (src->myaddr.ss_family) {
|
||||
case AF_INET:
|
||||
len = sizeof (struct sockaddr_in);
|
||||
break;
|
||||
case AF_INET6:
|
||||
len = sizeof (struct sockaddr_in6);
|
||||
break;
|
||||
default:
|
||||
/* don't know, Screw MacOS and use the full length */
|
||||
len = sizeof (src->myaddr);
|
||||
break;
|
||||
}
|
||||
len = gst_udp_get_sockaddr_length (&src->myaddr);
|
||||
if ((ret = bind (src->sock.fd, (struct sockaddr *) &src->myaddr, len)) < 0)
|
||||
goto bind_error;
|
||||
|
||||
|
|
Loading…
Reference in a new issue