tr_sessionSet( session, &settings );
- tr_udpInit( session, &session->public_ipv4->addr );
+ tr_udpInit( session );
if( session->isLPDEnabled )
tr_lpdInit( session, &session->public_ipv4->addr );
tr_udpUninit( session );
session->isDHTEnabled = !session->isDHTEnabled;
- tr_udpInit( session, &session->public_ipv4->addr );
+ tr_udpInit( session );
}
void
}
void
-tr_udpInit(tr_session *ss, const tr_address * addr)
+tr_udpInit(tr_session *ss)
{
+ tr_bool is_default;
+ const struct tr_address * public_addr;
struct sockaddr_in sin;
int rc;
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
- memcpy(&sin.sin_addr, &addr->addr.addr4, sizeof (struct in_addr));
+ public_addr = tr_sessionGetPublicAddress(ss, TR_AF_INET, &is_default);
+ if(public_addr && !is_default)
+ memcpy(&sin.sin_addr, &public_addr->addr.addr4, sizeof (struct in_addr));
sin.sin_port = htons(ss->udp_port);
rc = bind(ss->udp_socket, (struct sockaddr*)&sin, sizeof(sin));
if(rc < 0) {
#error only libtransmission should #include this header.
#endif
-void tr_udpInit( tr_session *, const tr_address *);
+void tr_udpInit( tr_session * );
void tr_udpUninit( tr_session * );