fixing SCTP on Linux
This commit is contained in:
parent
69653ea259
commit
0496635edd
@ -229,7 +229,7 @@ int addr_connect(evutil_socket_t fd, const ioa_addr* addr, int *out_errno)
|
||||
}
|
||||
}
|
||||
|
||||
int addr_bind(evutil_socket_t fd, const ioa_addr* addr, int reusable)
|
||||
int addr_bind(evutil_socket_t fd, const ioa_addr* addr, int reusable, int debug)
|
||||
{
|
||||
if (!addr || fd < 0) {
|
||||
|
||||
@ -255,11 +255,13 @@ int addr_bind(evutil_socket_t fd, const ioa_addr* addr, int reusable)
|
||||
return -1;
|
||||
}
|
||||
if(ret<0) {
|
||||
int err = errno;
|
||||
perror("bind");
|
||||
char str[129];
|
||||
addr_to_string(addr,(u08bits*)str);
|
||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_WARNING, "Trying to bind fd %d to <%s>: errno=%d\n", fd, str, err);
|
||||
if(debug) {
|
||||
int err = errno;
|
||||
perror("bind");
|
||||
char str[129];
|
||||
addr_to_string(addr,(u08bits*)str);
|
||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_WARNING, "Trying to bind fd %d to <%s>: errno=%d\n", fd, str, err);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -180,7 +180,7 @@ int socket_tcp_set_keepalive(evutil_socket_t fd);
|
||||
|
||||
int addr_connect(evutil_socket_t fd, const ioa_addr* addr, int *out_errno);
|
||||
|
||||
int addr_bind(evutil_socket_t fd, const ioa_addr* addr, int reusable);
|
||||
int addr_bind(evutil_socket_t fd, const ioa_addr* addr, int reusable, int debug);
|
||||
|
||||
int addr_get_from_sock(evutil_socket_t fd, ioa_addr *addr);
|
||||
|
||||
|
||||
@ -86,7 +86,7 @@ static int udp_create_server_socket(server_type* server,
|
||||
|
||||
set_sock_buf_size(udp_fd,UR_SERVER_SOCK_BUF_SIZE);
|
||||
|
||||
if(addr_bind(udp_fd,server_addr,1)<0) return -1;
|
||||
if(addr_bind(udp_fd,server_addr,1,1)<0) return -1;
|
||||
|
||||
socket_set_nonblocking(udp_fd);
|
||||
|
||||
|
||||
@ -509,7 +509,7 @@ static int create_new_connected_udp_socket(
|
||||
ret->local_addr_known = 1;
|
||||
addr_cpy(&(ret->local_addr), &(s->local_addr));
|
||||
|
||||
if (addr_bind(udp_fd,&(s->local_addr),1) < 0) {
|
||||
if (addr_bind(udp_fd,&(s->local_addr),1,1) < 0) {
|
||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR,
|
||||
"Cannot bind new detached udp server socket to local addr\n");
|
||||
IOA_CLOSE_SOCKET(ret);
|
||||
@ -773,7 +773,7 @@ static int create_server_socket(dtls_listener_relay_server_type* server, int rep
|
||||
int addr_bind_cycle = 0;
|
||||
retry_addr_bind:
|
||||
|
||||
if(addr_bind(udp_listen_fd,&server->addr,1)<0) {
|
||||
if(addr_bind(udp_listen_fd,&server->addr,1,1)<0) {
|
||||
perror("Cannot bind local socket to addr");
|
||||
char saddr[129];
|
||||
addr_to_string(&server->addr,(u08bits*)saddr);
|
||||
@ -851,7 +851,7 @@ static int reopen_server_socket(dtls_listener_relay_server_type* server, evutil_
|
||||
server->ifname);
|
||||
}
|
||||
|
||||
if(addr_bind(udp_listen_fd,&server->addr,1)<0) {
|
||||
if(addr_bind(udp_listen_fd,&server->addr,1,1)<0) {
|
||||
perror("Cannot bind local socket to addr");
|
||||
char saddr[129];
|
||||
addr_to_string(&server->addr,(u08bits*)saddr);
|
||||
|
||||
@ -940,7 +940,7 @@ static int bind_ioa_socket(ioa_socket_handle s, const ioa_addr* local_addr, int
|
||||
|
||||
if (s && s->fd >= 0 && s->e && local_addr) {
|
||||
|
||||
int res = addr_bind(s->fd, local_addr, reusable);
|
||||
int res = addr_bind(s->fd, local_addr, reusable,1);
|
||||
if (res >= 0) {
|
||||
s->bound = 1;
|
||||
addr_cpy(&(s->local_addr), local_addr);
|
||||
@ -1598,7 +1598,7 @@ ioa_socket_handle detach_ioa_socket(ioa_socket_handle s)
|
||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR,"Cannot bind udp server socket to device %s\n",(char*)(s->e->relay_ifname));
|
||||
}
|
||||
|
||||
if(addr_bind(udp_fd,&(s->local_addr),1)<0) {
|
||||
if(addr_bind(udp_fd,&(s->local_addr),1,1)<0) {
|
||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR,"Cannot bind new detached udp server socket to local addr\n");
|
||||
close(udp_fd);
|
||||
return ret;
|
||||
|
||||
@ -38,7 +38,11 @@
|
||||
|
||||
#include <event2/listener.h>
|
||||
|
||||
#if defined(__linux__) || defined(__LINUX__) || defined(__linux) || defined(linux__) || defined(LINUX) || defined(__LINUX) || defined(LINUX__)
|
||||
#include <linux/sctp.h>
|
||||
#else
|
||||
#include <netinet/sctp.h>
|
||||
#endif
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
@ -148,7 +152,7 @@ static int create_server_listener(tls_listener_relay_server_type* server) {
|
||||
int addr_bind_cycle = 0;
|
||||
retry_addr_bind:
|
||||
|
||||
if(addr_bind(tls_listen_fd,&server->addr,1)<0) {
|
||||
if(addr_bind(tls_listen_fd,&server->addr,1,1)<0) {
|
||||
perror("Cannot bind local socket to addr");
|
||||
char saddr[129];
|
||||
addr_to_string(&server->addr,(u08bits*)saddr);
|
||||
@ -208,10 +212,10 @@ static int sctp_create_server_listener(tls_listener_relay_server_type* server) {
|
||||
TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO,"Cannot bind listener socket to device %s\n",server->ifname);
|
||||
}
|
||||
|
||||
if(addr_bind(tls_listen_fd,&server->addr,1)<0) {
|
||||
if(addr_bind(tls_listen_fd,&server->addr,1,0)<0) {
|
||||
close(tls_listen_fd);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
socket_tcp_set_keepalive(tls_listen_fd);
|
||||
|
||||
|
||||
@ -1270,7 +1270,7 @@ void setup_admin_thread(void)
|
||||
return;
|
||||
}
|
||||
|
||||
if(addr_bind(adminserver.listen_fd,&cli_addr,1)<0) {
|
||||
if(addr_bind(adminserver.listen_fd,&cli_addr,1,1)<0) {
|
||||
perror("Cannot bind CLI socket to addr");
|
||||
char saddr[129];
|
||||
addr_to_string(&cli_addr,(u08bits*)saddr);
|
||||
|
||||
@ -263,7 +263,7 @@ static int run_stunclient(const char* rip, int rport, int *port, int *rfc5780, i
|
||||
err(-1, NULL);
|
||||
|
||||
if (!addr_any(&real_local_addr)) {
|
||||
if (addr_bind(udp_fd, &real_local_addr,0) < 0)
|
||||
if (addr_bind(udp_fd, &real_local_addr,0,1) < 0)
|
||||
err(-1, NULL);
|
||||
}
|
||||
}
|
||||
@ -276,7 +276,7 @@ static int run_stunclient(const char* rip, int rport, int *port, int *rfc5780, i
|
||||
|
||||
addr_set_port(&real_local_addr, response_port);
|
||||
|
||||
if (addr_bind(new_udp_fd, &real_local_addr,0) < 0)
|
||||
if (addr_bind(new_udp_fd, &real_local_addr,0,1) < 0)
|
||||
err(-1, NULL);
|
||||
}
|
||||
|
||||
|
||||
@ -259,7 +259,7 @@ static int clnet_connect(uint16_t clnet_remote_port, const char *remote_address,
|
||||
}
|
||||
}
|
||||
|
||||
addr_bind(clnet_fd, &local_addr, 0);
|
||||
addr_bind(clnet_fd, &local_addr, 0, 1);
|
||||
|
||||
} else if (strlen(local_address) > 0) {
|
||||
|
||||
@ -267,7 +267,7 @@ static int clnet_connect(uint16_t clnet_remote_port, const char *remote_address,
|
||||
&local_addr) < 0)
|
||||
return -1;
|
||||
|
||||
addr_bind(clnet_fd, &local_addr,0);
|
||||
addr_bind(clnet_fd, &local_addr,0,1);
|
||||
}
|
||||
|
||||
if(clnet_info->is_peer) {
|
||||
@ -1597,7 +1597,7 @@ void tcp_data_connect(app_ur_session *elem, u32bits cid)
|
||||
|
||||
addr_set_port(&(elem->pinfo.tcp_conn[i]->tcp_data_local_addr),0);
|
||||
|
||||
addr_bind(clnet_fd, &(elem->pinfo.tcp_conn[i]->tcp_data_local_addr), 1);
|
||||
addr_bind(clnet_fd, &(elem->pinfo.tcp_conn[i]->tcp_data_local_addr), 1, 1);
|
||||
|
||||
addr_get_from_sock(clnet_fd,&(elem->pinfo.tcp_conn[i]->tcp_data_local_addr));
|
||||
|
||||
@ -1625,7 +1625,7 @@ void tcp_data_connect(app_ur_session *elem, u32bits cid)
|
||||
|
||||
addr_set_port(&(elem->pinfo.tcp_conn[i]->tcp_data_local_addr),0);
|
||||
|
||||
addr_bind(clnet_fd, &(elem->pinfo.tcp_conn[i]->tcp_data_local_addr),1);
|
||||
addr_bind(clnet_fd, &(elem->pinfo.tcp_conn[i]->tcp_data_local_addr),1,1);
|
||||
|
||||
addr_get_from_sock(clnet_fd,&(elem->pinfo.tcp_conn[i]->tcp_data_local_addr));
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user