--- gvpe/src/vpn_tcp.C 2005/03/03 16:54:34 1.12 +++ gvpe/src/vpn_tcp.C 2005/07/09 02:49:06 1.16 @@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with gvpe; if not, write to the Free Software - Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" @@ -63,10 +63,9 @@ void cleaner_cb (time_watcher &w); time_watcher cleaner; tcp_si_map () - : cleaner(this, &tcp_si_map::cleaner_cb) - { - cleaner.start (0); - } + : cleaner(this, &tcp_si_map::cleaner_cb) + { } + } tcp_si; struct tcp_connection : io_watcher { @@ -95,9 +94,9 @@ void error (); // abort conenction && cleanup operator tcp_si_map::value_type() - { - return tcp_si_map::value_type (&si, this); - } + { + return tcp_si_map::value_type (&si, this); + } tcp_connection (int fd_, const sockinfo &si_, vpn &v_); ~tcp_connection (); @@ -132,12 +131,13 @@ if (fd >= 0) { + fcntl (fd, F_SETFL, O_NONBLOCK); + fcntl (fd, F_SETFD, FD_CLOEXEC); + sockinfo si(sa, PROT_TCPv4); slog (L_DEBUG, _("%s: accepted tcp connection"), (const char *)si);//D - fcntl (fd, F_SETFL, O_NONBLOCK); - tcp_connection *i = new tcp_connection (fd, si, *this); tcp_si.insert (*i); } @@ -391,6 +391,9 @@ if (connect (fd, csi->sav4 (), csi->salenv4 ()) >= 0 || errno == EINPROGRESS) { + fcntl (fd, F_SETFL, O_NONBLOCK); + fcntl (fd, F_SETFD, FD_CLOEXEC); + state = CONNECTING; start (fd, EVENT_WRITE); } @@ -450,6 +453,9 @@ tcp_connection::tcp_connection (int fd_, const sockinfo &si_, vpn &v_) : v(v_), si(si_), io_watcher(this, &tcp_connection::tcpv4_ev) { + if (!tcp_si.cleaner.active) + tcp_si.cleaner.start (0); + last_activity = NOW; r_pkt = 0; w_pkt = 0;