projects
/
runtime.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Close socket if TCP connecting fails to avoid leaking sockets
[runtime.git]
/
lib
/
silcutil
/
unix
/
silcunixnet.c
diff --git
a/lib/silcutil/unix/silcunixnet.c
b/lib/silcutil/unix/silcunixnet.c
index e0befdc19979ca325a83cd39b6da9015e34a28f8..2332672d4643d125180f7923315020246153c51c 100644
(file)
--- a/
lib/silcutil/unix/silcunixnet.c
+++ b/
lib/silcutil/unix/silcunixnet.c
@@
-363,8
+363,10
@@
int silc_net_udp_receive(SilcStream stream, char *remote_ip_addr,
if (remote_ip_addr && remote_port) {
if (sock->ipv6) {
if (remote_ip_addr && remote_port) {
if (sock->ipv6) {
+#ifdef HAVE_IPV6
from = (struct sockaddr *)&s.sin6;
flen = sizeof(s.sin6);
from = (struct sockaddr *)&s.sin6;
flen = sizeof(s.sin6);
+#endif /* HAVE_IPV6 */
} else {
from = (struct sockaddr *)&s.sin;
flen = sizeof(s.sin);
} else {
from = (struct sockaddr *)&s.sin;
flen = sizeof(s.sin);
@@
-395,9
+397,13
@@
int silc_net_udp_receive(SilcStream stream, char *remote_ip_addr,
/* Return remote address */
if (remote_ip_addr && remote_port) {
if (sock->ipv6) {
/* Return remote address */
if (remote_ip_addr && remote_port) {
if (sock->ipv6) {
+#ifdef HAVE_IPV6
*remote_port = ntohs(s.sin6.sin6_port);
inet_ntop(AF_INET6, &s.sin6.sin6_addr, remote_ip_addr,
remote_ip_addr_size);
*remote_port = ntohs(s.sin6.sin6_port);
inet_ntop(AF_INET6, &s.sin6.sin6_addr, remote_ip_addr,
remote_ip_addr_size);
+#else
+ *remote_port = 0;
+#endif /* HAVE_IPV6 */
} else {
*remote_port = ntohs(s.sin.sin_port);
inet_ntop(AF_INET, &s.sin.sin_addr, remote_ip_addr,
} else {
*remote_port = ntohs(s.sin.sin_port);
inet_ntop(AF_INET, &s.sin.sin_addr, remote_ip_addr,
@@
-695,6
+701,9
@@
SILC_FSM_STATE(silc_net_connect_st_finish)
silc_async_free(conn->op);
}
silc_async_free(conn->op);
}
+ if (conn->sock && conn->status != SILC_NET_OK)
+ silc_net_close_connection(conn->sock);
+
return SILC_FSM_FINISH;
}
return SILC_FSM_FINISH;
}