/* process successful connection */
static void t_connected(transfer *tr)
{
    int callval_i;
    int connect_error;
    SIGNEDSOCK int connect_error_len = sizeof(connect_error);

    tr->con.connecttime = gdata.curtime;
    FD_CLR(tr->con.clientsocket, &gdata.writeset);
    callval_i = getsockopt(tr->con.clientsocket,
                           SOL_SOCKET, SO_ERROR,
                           &connect_error, &connect_error_len);

    if (callval_i < 0) {
        outerror(OUTERROR_TYPE_WARN,
                 "Couldn't determine upload connection status on %s: %s",
                 gnetwork->name, strerror(errno));
        t_closeconn(tr, "Download Connection Failed status:", errno);
        return;
    }
    if (connect_error) {
        t_closeconn(tr, "Download Connection Failed", connect_error);
        return;
    }

    ioutput(OUT_S|OUT_L|OUT_D, COLOR_MAGENTA,
            "Download Connection Established on %s", gnetwork->name);

    t_setup_send(tr);
    return;
}
void t_establishcon (transfer * const t)
{
   SIGNEDSOCK int addrlen;
   
   updatecontext();
   
   addrlen = (t->con.family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6);
   
   if ((t->con.clientsocket = accept(t->con.listensocket, &t->con.local.sa, &addrlen)) < 0) {
      int errno2 = errno;
      outerror(OUTERROR_TYPE_WARN, "Accept Error, Aborting: %s", strerror(errno));
      t_closeconn(t, "Connection Error, Try Again", errno2);
      return;
      }
   
   ir_listen_port_connected(t->con.localport);
   
   event_close(t->con.listensocket);
   t->con.listensocket = FD_UNUSED;

   t_setup_send(t);
}