summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authormikeos <mike.osipov@gmail.com>2012-10-14 16:16:54 +0400
committermikeos <mike.osipov@gmail.com>2012-10-14 16:16:54 +0400
commit5e285371313f0ea98123aa06c65a857094c2a7c1 (patch)
tree710b035d561dc7224ace275afd018f80a3d68bd7 /main.c
parent318c83516e1c670855865fd9a25f7ff9d553df48 (diff)
some fixes
Diffstat (limited to 'main.c')
-rw-r--r--main.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/main.c b/main.c
index 0c4f9b3..90f22d0 100644
--- a/main.c
+++ b/main.c
@@ -555,17 +555,17 @@ static void test_chans(fd_set *readfds, fd_set *writefds, fd_set *exceptfds)
else
DEBUG_CODE(
msg_warn("read from %s %d bytes",
- remote_addr, n);
+ chan->server->remote_addr, n);
);
}
if (fd2 >= 0 && FD_ISSET(fd2, writefds)) {
- if (bwrite(b1, fd2) < 0)
+ if ((n = bwrite(b1, fd2)) < 0)
shut(&fd2);
else
DEBUG_CODE(
msg_warn("write to %s %d bytes",
- remote_addr, n);
+ chan->server->remote_addr, n);
);
}
@@ -577,8 +577,11 @@ static void test_chans(fd_set *readfds, fd_set *writefds, fd_set *exceptfds)
chan->fd1 = fd1;
chan->fd2 = fd2;
- if (fd1 < 0 && fd2 < 0)
+ if (fd1 < 0 && fd2 < 0) {
+ fprintf(stderr, "close: %s to %s\n", chan->addr,
+ chan->server->remote_addr);
chan_free(chan);
+ }
}
}
@@ -599,12 +602,18 @@ static void accept_client(struct server *server, int serv_sock)
}
fd2 = tcp_socket();
- chan = chan_new(server, addrstr(&sa), fd1, fd2);
ret = connect(fd2, (struct sockaddr *) &server->remote_sa, sizeof(struct sockaddr_in));
+ if (ret < 0 && errno != EINPROGRESS) {
+ close(fd1);
+ close(fd2);
+
+ msg_err("connect");
+ return;
+ }
+
+ chan = chan_new(server, addrstr(&sa), fd1, fd2);
if (ret == 0)
chan->connected++;
- else if (errno != EINPROGRESS)
- sys_err("connect");
fprintf(stderr, "accept: %s to %s\n", chan->addr, server->remote_addr);
}