+Version 1.0.8 May 16 2007
+
+ * Fixed some memory and resource leaks.
+
+ * Made network sockets non-blocking under Windows.
+
Version 1.0.7 Jan 5 2007
* Fixed a bug that caused slow network speeds on Windows.
-This is the README file for tinc version 1.0.7. Installation
+This is the README file for tinc version 1.0.8. Installation
instructions may be found in the INSTALL file.
-tinc is Copyright (C) 1998-2006 by:
+tinc is Copyright (C) 1998-2007 by:
Ivo Timmermans,
Guus Sliepen <guus@tinc-vpn.org>,
Compatibility
-------------
-Version 1.0.7 is compatible with 1.0pre8, 1.0 and later, but not with older
+Version 1.0.8 is compatible with 1.0pre8, 1.0 and later, but not with older
versions of tinc.
/*
connection.c -- connection list management
- Copyright (C) 2000-2006 Guus Sliepen <guus@tinc-vpn.org>,
+ Copyright (C) 2000-2007 Guus Sliepen <guus@tinc-vpn.org>,
2000-2005 Ivo Timmermans
This program is free software; you can redistribute it and/or modify
if(!c)
return;
+ if(c->name)
+ free(c->name);
+
if(c->hostname)
free(c->hostname);
sock = socket(ai->ai_family, SOCK_STREAM, IPPROTO_TCP);
- freeaddrinfo(ai);
-
if(sock < 0) {
logger(LOG_ERR, _("System call `%s' failed: %s"), "socket", strerror(errno));
+ freeaddrinfo(ai);
return -1;
}
if(connect(sock, ai->ai_addr, ai->ai_addrlen)) {
logger(LOG_ERR, _("System call `%s' failed: %s"), "connect", strerror(errno));
+ freeaddrinfo(ai);
return -1;
}
+ freeaddrinfo(ai);
+
logger(LOG_DEBUG, _("Tap reader running"));
/* Read from tap device and send to parent */
/*
net_socket.c -- Handle various kinds of sockets.
Copyright (C) 1998-2005 Ivo Timmermans,
- 2000-2006 Guus Sliepen <guus@tinc-vpn.org>
+ 2000-2007 Guus Sliepen <guus@tinc-vpn.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
if(fcntl(c->socket, F_SETFL, flags | O_NONBLOCK) < 0) {
logger(LOG_ERR, _("fcntl for %s: %s"), c->hostname, strerror(errno));
}
+#elif defined(WIN32)
+ unsigned long arg = 1;
+
+ if(ioctlsocket(c->socket, FIONBIO, &arg) != 0) {
+ logger(LOG_ERR, _("ioctlsocket for %s: WSA error %d"), c->hostname, WSAGetLastError());
+ }
#endif
#if defined(SOL_TCP) && defined(TCP_NODELAY)
return -1;
}
}
+#elif defined(WIN32)
+ {
+ unsigned long arg = 1;
+ if(ioctlsocket(nfd, FIONBIO, &arg) != 0) {
+ closesocket(nfd);
+ logger(LOG_ERR, _("Call to `%s' failed: WSA error %d"), "ioctlsocket",
+ WSAGetLastError());
+ return -1;
+ }
+ }
#endif
option = 1;
result = connect(c->socket, &c->address.sa, SALEN(c->address.sa));
if(result == -1) {
- if(errno == EINPROGRESS) {
+ if(errno == EINPROGRESS
+#if defined(WIN32) && !defined(O_NONBLOCK)
+ || WSAGetLastError() == WSAEWOULDBLOCK
+#endif
+ ) {
c->status.connecting = true;
return;
}
sockaddrunmap(&sa);
c = new_connection();
- c->name = NULL;
+ c->name = xstrdup("<unknown>");
c->outcipher = myself->connection->outcipher;
c->outdigest = myself->connection->outdigest;
c->outmaclength = myself->connection->outmaclength;
/*
protocol_auth.c -- handle the meta-protocol, authentication
Copyright (C) 1999-2005 Ivo Timmermans,
- 2000-2006 Guus Sliepen <guus@tinc-vpn.org>
+ 2000-2007 Guus Sliepen <guus@tinc-vpn.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
return false;
}
- /* If we set c->name in advance, make sure we are connected to the right host */
+ /* If this is an outgoing connection, make sure we are connected to the right host */
- if(c->name) {
+ if(c->outgoing) {
if(strcmp(c->name, name)) {
logger(LOG_ERR, _("Peer %s is %s instead of %s"), c->hostname, name,
c->name);