Skip to content

Commit e58b13e

Browse files
committed
wip
1 parent 0d1ffd1 commit e58b13e

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

src/arvgvinterface.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,17 @@ arv_gv_discover_socket_list_new (void)
8686
ArvGvDiscoverSocket *discover_socket = g_new0 (ArvGvDiscoverSocket, 1);
8787
GSocketAddress *socket_address;
8888
GSocketAddress *socket_broadcast;
89+
GSocketAddress *any_socket_address;
90+
GInetAddress *any_address;
8991
GInetAddress *inet_address;
9092
GInetAddress *inet_broadcast;
9193
char *inet_address_string;
9294
char *inet_broadcast_string;
9395
GError *error = NULL;
9496
gint buffer_size = ARV_GV_INTERFACE_DISCOVERY_SOCKET_BUFFER_SIZE;
97+
int socket_fd;
98+
const char *interface_name;
99+
95100
socket_address = g_socket_address_new_from_native (arv_network_interface_get_addr(iface_iter->data),
96101
sizeof (struct sockaddr));
97102
socket_broadcast = g_socket_address_new_from_native (arv_network_interface_get_broadaddr(iface_iter->data),
@@ -112,7 +117,16 @@ arv_gv_discover_socket_list_new (void)
112117
G_SOCKET_TYPE_DATAGRAM,
113118
G_SOCKET_PROTOCOL_UDP, NULL);
114119
arv_socket_set_recv_buffer_size (g_socket_get_fd (discover_socket->socket), buffer_size);
115-
g_socket_bind (discover_socket->socket, discover_socket->interface_address, FALSE, &error);
120+
121+
any_address = g_inet_address_new_any (G_SOCKET_FAMILY_IPV4);
122+
any_socket_address = g_inet_socket_address_new (any_address, 0);
123+
g_socket_bind (discover_socket->socket, any_socket_address, FALSE, &error);
124+
g_object_unref (any_socket_address);
125+
g_object_unref (any_address);
126+
127+
interface_name = arv_network_interface_get_name (iface_iter->data);
128+
socket_fd = g_socket_get_fd(discover_socket->socket);
129+
setsockopt (socket_fd, SOL_SOCKET, SO_BINDTODEVICE, interface_name, strlen (interface_name));
116130

117131
socket_list->sockets = g_slist_prepend (socket_list->sockets, discover_socket);
118132
socket_list->n_sockets++;

0 commit comments

Comments
 (0)