static int VBE_TryConnect(const struct sess *sp, int pf, const struct sockaddr *sa, socklen_t salen, const struct backend *bp) { int s, i, tmo; char abuf1[TCP_ADDRBUFSIZE], abuf2[TCP_ADDRBUFSIZE]; char pbuf1[TCP_PORTBUFSIZE], pbuf2[TCP_PORTBUFSIZE]; CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); s = socket(pf, SOCK_STREAM, 0); if (s < 0) return (s); tmo = (int)(sp->connect_timeout * 1000); if (bp->connect_timeout > 10e-3) tmo = (int)(bp->connect_timeout * 1000); if (tmo > 0) i = TCP_connect(s, sa, salen, tmo); else i = connect(s, sa, salen); if (i != 0) { AZ(close(s)); return (-1); } TCP_myname(s, abuf1, sizeof abuf1, pbuf1, sizeof pbuf1); TCP_name(sa, salen, abuf2, sizeof abuf2, pbuf2, sizeof pbuf2); WSL(sp->wrk, SLT_BackendOpen, s, "%s %s %s %s %s", bp->vcl_name, abuf1, pbuf1, abuf2, pbuf2); return (s); }
int main(int argc, char *argv[]) { if (argc < 4) { fatal("Usage: %s hostname port message\n", argv[0]); } String_pointer message = String_fromCString(argv[3]); TCPConnection_pointer connection = TCP_connect(argv[2], argv[1]); TCP_sendMessage(connection, message); String_pointer received = TCP_receiveMessage(connection); puts(String_toCstring(received)); String_destroy(received); String_destroy(message); TCP_closeAndDestroyConnection(connection); return 0; }