--- tsocks.c.orig 2007-03-28 12:26:49.000000000 +0100
+++ tsocks.c 2007-03-28 12:25:55.000000000 +0100
static char *conffile = NULL;
+void _init(void) __attribute__ ((constructor));
int connect(CONNECT_SIGNATURE);
int select(SELECT_SIGNATURE);
int poll(POLL_SIGNATURE);
struct sockaddr_in *connaddr;
struct sockaddr_in peer_address;
struct sockaddr_in server_address;
- int gotvalidserver = 0, rc, namelen = sizeof(peer_address);
+ int gotvalidserver = 0, rc;
- int sock_type_len = sizeof(sock_type);
+ socklen_t sock_type_len = sizeof(sock_type);
+ socklen_t namelen = sizeof(peer_address);
* come around again (since we can't flag it for read, we don't know
* if there is any data to be read and can't be bothered checking) */
if (conn->selectevents & WRITE) {
+ ufds[i].revents |= (conn->selectevents & WRITE);
sizeof(conn->serveraddr));
show_msg(MSGDEBUG, "Connect returned %d, errno is %d\n", rc, errno);
+ if (rc && errno == EISCONN) {
+ show_msg(MSGDEBUG, "Socket %d already connected to SOCKS server\n",
+ conn->state = CONNECTED;
if (errno != EINPROGRESS) {
show_msg(MSGERR, "Error %d attempting to connect to SOCKS "
"server (%s)\n", errno, strerror(errno));