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);
}
Пример #2
0
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;
}