Exemple #1
0
static void onNotify(struct Event* event, void* arg)
{
	assert(event != NULL && arg != NULL);

#ifdef DEBUG
	printf("on notify.\n");
#endif	
	struct WorkerThread* thread = (struct WorkerThread*)arg;
	int tid = thread->tid;
	Server* server = thread->server;
	struct ConnQueue* queue = thread->queue;
	int efd = event->fd;
	uint64_t count;	

	int nread = read(efd, &count, sizeof(count));
	assert(nread == sizeof(count));

	int sockfd = poll(queue);
	struct BufferEvent* bevent = newBufferEvent(event->loop, sockfd,
					 server->onRead, server->onWrite, bevent);
	assert(bevent != NULL);
	enableRead(bevent);
	setTimer(bevent, 6000);
	if(server->afterAccept)
		server->afterAccept(bevent, NULL);
}
bool TransportUDP::createIncoming(int port, bool is_server)
{
  is_server_ = is_server;

  sock_ = socket(AF_INET, SOCK_DGRAM, 0);

  if (sock_ <= 0)
  {
    ROS_ERROR("socket() failed with error [%s]", last_socket_error_string());
    return false;
  }

  server_address_.sin_family = AF_INET;
  server_address_.sin_port = htons(port);
  server_address_.sin_addr.s_addr = INADDR_ANY;
  if (bind(sock_, (sockaddr *)&server_address_, sizeof(server_address_)) < 0)
  {
    ROS_ERROR("bind() failed with error [%s]",  last_socket_error_string());
    return false;
  }

  socklen_t len = sizeof(server_address_);
  getsockname(sock_, (sockaddr *)&server_address_, &len);
  server_port_ = ntohs(server_address_.sin_port);
  ROSCPP_LOG_DEBUG("UDPROS server listening on port [%d]", server_port_);

  if (!initializeSocket())
  {
    return false;
  }

  enableRead();

  return true;
}
bool TransportTCP::listen(int port, int backlog, const AcceptCallback& accept_cb)
{
    is_server_ = true;
    accept_cb_ = accept_cb;

    sock_ = socket(AF_INET, SOCK_STREAM, 0);

    if (sock_ <= 0)
    {
        ROS_ERROR("socket() failed with error [%s]", last_socket_error_string());
        return false;
    }

    server_address_.sin_family = AF_INET;
    server_address_.sin_port = htons(port);
    server_address_.sin_addr.s_addr = INADDR_ANY;
    if (bind(sock_, (sockaddr *)&server_address_, sizeof(server_address_)) < 0)
    {
        ROS_ERROR("bind() failed with error [%s]", last_socket_error_string());
        return false;
    }

    ::listen(sock_, backlog);
    socklen_t len = sizeof(server_address_);
    getsockname(sock_, (sockaddr *)&server_address_, &len);
    server_port_ = ntohs(server_address_.sin_port);

    if (!initializeSocket())
    {
        return false;
    }

    if (!(flags_ & SYNCHRONOUS))
    {
        enableRead();
    }

    return true;
}
Exemple #4
0
bool TransportTCP::listen(int port, int backlog, const AcceptCallback& accept_cb)
{
  is_server_ = true;
  accept_cb_ = accept_cb;

  if (s_use_ipv6_)
  {
    sock_ = socket(AF_INET6, SOCK_STREAM, 0);
    sockaddr_in6 *address = (sockaddr_in6 *)&server_address_;
    address->sin6_family = AF_INET6;
    address->sin6_addr = isOnlyLocalhostAllowed() ? 
                         in6addr_loopback : 
                         in6addr_any;
    address->sin6_port = htons(port);
    sa_len_ = sizeof(sockaddr_in6);
  }
  else
  {
    sock_ = socket(AF_INET, SOCK_STREAM, 0);
    sockaddr_in *address = (sockaddr_in *)&server_address_;
    address->sin_family = AF_INET;
    address->sin_addr.s_addr = isOnlyLocalhostAllowed() ? 
                               htonl(INADDR_LOOPBACK) : 
                               INADDR_ANY;
    address->sin_port = htons(port);
    sa_len_ = sizeof(sockaddr_in);
  }

  if (sock_ <= 0)
  {
    ROS_ERROR("socket() failed with error [%s]", last_socket_error_string());
    return false;
  }


  if (bind(sock_, (sockaddr *)&server_address_, sa_len_) < 0)
  {
    ROS_ERROR("bind() failed with error [%s]", last_socket_error_string());
    return false;
  }

  ::listen(sock_, backlog);
  getsockname(sock_, (sockaddr *)&server_address_, &sa_len_);

  switch (server_address_.ss_family)
  {
    case AF_INET:
      server_port_ = ntohs(((sockaddr_in *)&server_address_)->sin_port);
      break;
    case AF_INET6:
      server_port_ = ntohs(((sockaddr_in6 *)&server_address_)->sin6_port);
      break;
  }

  if (!initializeSocket())
  {
    return false;
  }

  if (!(flags_ & SYNCHRONOUS))
  {
    enableRead();
  }

  return true;
}