Ejemplo n.º 1
0
static void *
supplier (void *)
{
  ACE_UPIPE_Stream s_stream;

  ACE_UPIPE_Addr c_addr (ACE_TEXT("pattern"));

  ACE_Auto_Basic_Array_Ptr<char> mybuf (new char[size]);

  for (int i = 0; i < size; i++)
    mybuf[i] = 'a';

  ACE_DEBUG ((LM_DEBUG,
              "(%t) supplier starting connect thread\n"));

  ACE_UPIPE_Connector con;

  if (con.connect (s_stream, c_addr) == -1)
    ACE_ERROR ((LM_ERROR,
                "(%t) %p\n",
                "ACE_UPIPE_Acceptor.connect failed"));

  // Test asynchronicity (the "acausal principle" ;-)).
  s_stream.enable (ACE_SIGIO);

  ACE_Message_Block *mb_p;

  for (int j = 0; j < iterations; j++)
    {
      ACE_NEW_RETURN (mb_p,
                      ACE_Message_Block (size,
                                         ACE_Message_Block::MB_DATA,
                                         (ACE_Message_Block *) 0,
                                         mybuf.get ()),
                      0);
      if (s_stream.send (mb_p) == -1)
        ACE_ERROR_RETURN ((LM_ERROR,
                           "(%t) %p\n",
                           "send failed"),
                          0);
    }

  ACE_NEW_RETURN (mb_p,
                  ACE_Message_Block ((size_t) 0),
                  0);

  // Insert a 0-sized message block to signal the other side to shut
  // down.
  if (s_stream.send (mb_p) == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       "(%t) %p\n",
                       "send failed"),
                          0);
  s_stream.close ();
  return 0;
}
Ejemplo n.º 2
0
void Firehose_Send(uint16_t port, size_t len, const uint8_t *src)
{
//	auto t_begin = std::chrono::high_resolution_clock::now();
	
//	for (int i = 1; i <= gpGlobals->maxClients; ++i) {
	for (int i = 1; i <= 1; ++i) {
		INetChannelInfo *info = engine->GetPlayerNetInfo(i);
		if (info == nullptr) continue;
		
		netadr_t c_addr(info->GetAddress());
		if (!c_addr.IsValid()) continue;
		
		c_addr.SetPort(port);
		
	//	DevMsg("Sending %u bytes to player %d: %s\n", len, i, c_addr.ToString());
		
		int s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
		if (s < 0) {
			Warning("Firehose_Send: socket creation failed: %s\n", strerror(errno));
			continue;
		}
		
		sockaddr_in addr;
		c_addr.ToSockadr((sockaddr *)&addr);
		
//		bool retry;
//		do {
//			retry = false;
//			
			if (sendto(s, (const char *)src, len, 0, (const sockaddr *)&addr, sizeof(addr)) < 0) {
//				if (errno == ENOBUFS) {
//					retry = true;
//				} else {
					Warning("Firehose_Send: sendto failed: %s\n", strerror(errno));
//				}
			}
//		} while (retry);
		
#if defined _WINDOWS
		closesocket(s);
#else
		close(s);
#endif
	}
	
//	auto t_end = std::chrono::high_resolution_clock::now();
	
//	auto dt = t_end - t_begin;
//	DevMsg("Firehose_Send: %lld ns\n", std::chrono::duration_cast<std::chrono::nanoseconds>(dt).count());
}