static int vbe_TryConnect(const struct busyobj *bo, int pf, const struct suckaddr *sa, const struct vdi_simple *vs) { int s, i, tmo; double tmod; CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(vs, VDI_SIMPLE_MAGIC); s = socket(pf, SOCK_STREAM, 0); if (s < 0) return (s); FIND_TMO(connect_timeout, tmod, bo, vs->vrt); tmo = (int)(tmod * 1000.0); i = VTCP_connect(s, sa, tmo); if (i != 0) { AZ(close(s)); return (-1); } return (s); }
Marg_poker(const struct vev *e, int what) { int s; struct m_addr *ma; assert(e == M_poker); (void)what; M_poker->timeout = M_poll; /* XXX nasty ? */ if (M_fd > 0) return (0); ma = VTAILQ_FIRST(&m_addr_list); AN(ma); /* Try to connect asynchronously */ s = VTCP_connect(ma->sa, -1); if (s < 0) return (0); mgt_got_fd(s); M_conn = vev_new(); AN(M_conn); M_conn->callback = Marg_connect; M_conn->name = "-M connector"; M_conn->fd_flags = EV_WR; M_conn->fd = s; M_fd = s; AZ(vev_add(mgt_evb, M_conn)); return (0); }
vtcp_open_callback(void *priv, const struct suckaddr *sa) { double *p = priv; return (VTCP_connect(sa, (int)floor(*p * 1e3))); }