Exemplo n.º 1
0
// --------------------------------------------------------------------------
// IEE_stop: ICMP Echo Engine stop procedure. Stops the IEE_process function.
//           This function should be called from an external thread.
//
// Parameters:
//   p_config: Opaque pointer to a ICMP_ECHO_ENGINE_PARMS structure.
//
// Return values:
//   IEE_SUCCESS on success.
//   IEE_INVALID_PARMS if invalid pp_config.
//
iee_ret_t IEE_stop( void* p_config )
{
  PICMP_ECHO_ENGINE_PARMS p_engine = (PICMP_ECHO_ENGINE_PARMS)p_config;

  // Verify input parameters.
  if( p_engine == NULL )
  {
    // Error: invalid p_config, or already freed.
    return IEE_INVALID_PARMS;
  }

  // Notify the engine to stop.
  p_engine->eng_ongoing = 0;

  // Close the ICMP socket.
  //   If the ICMP echo engine is currently in a read operation, the
  // IEE_process() function will not return until the call to select()
  // returns. This time lapse depends on the current processing. It can take
  // up to p_engine->send_interval milliseconds. To break the select() call,
  // we close the ICMP socket so it will return as an error.
  //
  pal_closesocket( p_engine->icmp_sfd );  // break a wait on 'select()'.

  return IEE_SUCCESS;
}
Exemplo n.º 2
0
// --------------------------------------------------------------------------
// IEE_destroy: ICMP Echo Engine destruction routine.
//
// Parameters:
//   pp_config: Opaque double pointer to a ICMP_ECHO_ENGINE_PARMS structure.
//
// Return values:
//   IEE_SUCCESS on success.
//   IEE_INVALID_PARMS if invalid pp_config.
//
iee_ret_t IEE_destroy( void** pp_config )
{
  PICMP_ECHO_ENGINE_PARMS p_engine = NULL;


  // Verify input parameters.
  if( pp_config == NULL  || *pp_config == NULL )
  {
    // Error: invalid p_config, or already freed.
    return IEE_INVALID_PARMS;
  }

  // Cast opaque double pointer to allow manipulation.
  p_engine = (PICMP_ECHO_ENGINE_PARMS)*pp_config;

  // Close the ICMP raw socket.
  pal_closesocket( p_engine->icmp_sfd );

  // Free the engine echo event list.
  _free_echo_event_list( p_engine->event_list );

  // Deallocate the memory used by the engine structure.
  pal_free( p_engine );
  *pp_config = NULL;

  return IEE_SUCCESS;
}
Exemplo n.º 3
0
/* Destroy a socket */
sint32_t destroySocket(pal_socket_t sfd)
{
  pal_shutdown( sfd, PAL_SOCK_SHTDN_BOTH );
  pal_closesocket( sfd );

  return 0;
}
Exemplo n.º 4
0
// --------------------------------------------------------------------------
// NetTCP6Connect:
//
// Return values:
//    0: success
//   -1: Failed to resolve srvname.
//   -2: Socket error / Failed to connect (TCP only).
//
sint32_t NetTCP6Connect( pal_socket_t *p_sock, char *Host, uint16_t Port ) 
{
  pal_socket_t         sockfd;
  struct sockaddr_in6  serv_addr;
  struct in6_addr      addr;

  if( NULL == NetText2Addr6(Host, &addr) )
  {
    return -1;
  }

  memset(&serv_addr, 0, sizeof(serv_addr)); 
  serv_addr.sin6_family      = AF_INET6;
  serv_addr.sin6_port        = htons(Port);
  serv_addr.sin6_addr = addr;

  /*
   * Open a TCP socket (an Internet 6 stream socket).
   */
  if( (sockfd = pal_socket(AF_INET6, SOCK_STREAM, 0)) < 0 )
  {
    return -2;
  }

  /*
   * Connect to the server.
   */
  if( pal_connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0 )
  {
    pal_closesocket( sockfd );
    return -2;
  }
  
  *p_sock = sockfd;
  return 0;
}
Exemplo n.º 5
0
// --------------------------------------------------------------------------
// NetUDPConnect:
//
// Return values:
//    0: success
//   -1: Failed to resolve srvname.
//   -2: Socket error / Failed to connect (TCP only).
//
sint32_t NetUDPConnect(pal_socket_t *p_sock, char *Host, uint16_t Port)
{
  pal_socket_t        sockfd;
  struct sockaddr_in  serv_addr;
  struct in_addr      addr;

  if( NetText2Addr(Host, &addr) == NULL )
  {
    return -1;
  }

  memset(&serv_addr, 0, sizeof(serv_addr));
  serv_addr.sin_family      = AF_INET;
  serv_addr.sin_port        = htons(Port);
  serv_addr.sin_addr.s_addr = addr.s_addr;

  /*
   * Open a UDP socket.
   */
  if( (sockfd = pal_socket(AF_INET, SOCK_DGRAM, 0)) < 0 )
  {
    return -2;
  }

  /*
   * Connect to the server.
   */
  if( pal_connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0 )
  {
    pal_closesocket( sockfd );
    return -2;
  }

  *p_sock = sockfd;
  return 0;
}
Exemplo n.º 6
0
sint32_t NetTCP6Close( pal_socket_t Socket )
{
  pal_shutdown( Socket, PAL_SOCK_SHTDN_BOTH );
  return pal_closesocket( Socket );
}