Exemplo n.º 1
0
/* It opens a connection to the host name rhost that is listening
   on the specified port. It returns the socket descriptor, or -1
   in case of failure.
 */
static int clientsocket(const char *rhost, unsigned short port)
{
  struct hostent *ptrh;  /* pointer to a host table entry     */
  struct sockaddr_in sad;/* structure to hold server's address*/
  int    fd;             /* socket descriptor                 */

  memset((char *)&sad, 0, sizeof(sad)); /* clear sockaddr structure */
  sad.sin_family = AF_INET;  /* set family to Internet */
  sad.sin_port = htons((u_short)port); 
  /* Convert host name to equivalent IP address and copy sad */
  ptrh = net_gethostbyname(rhost);
  if (((char *)ptrh) == NULL) {
    fprintf(stderr, "invalid host: %s\n", rhost);
    return (-1);
  }
  memcpy(&sad.sin_addr, ptrh->h_addr, ptrh->h_length);
  
  /* Create a socket */
  fd = net_socket(PF_INET, SOCK_STREAM, 0);
  if (fd < 0) {
    fprintf(stderr, "socket creation failed\n");
    return (-1);;
  }
  
  /* Connect the socket to the specified server */
  if (net_connect(fd, (struct sockaddr *)&sad, sizeof(sad)) < 0) {
    fprintf(stderr, "connect failed\n");
    return (-1);
  }

  return fd;
}
Exemplo n.º 2
0
static s32 tcp_socket(void)
{
	s32 s, res;

	s = net_socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
	if (s < 0)
		return s;

	if(split_res == 2){
		return s;
	}

	res = net_fcntl(s, F_GETFL, 0);
	if (res < 0)
	{
		net_close(s);
		return res;
	}

	res = net_fcntl(s, F_SETFL, res | IOS_O_NONBLOCK);
	if (res < 0)
	{
		net_close(s);
		return res;
	}

	return s;
}
Exemplo n.º 3
0
s32 create_server(u16 port) {
	s32 server = net_socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
	if (server < 0)
		return -1;

	set_blocking(server, false);

	struct sockaddr_in bindAddress;
	memset(&bindAddress, 0, sizeof(bindAddress));
	bindAddress.sin_family = AF_INET;
	bindAddress.sin_port = htons(port);
	bindAddress.sin_addr.s_addr = htonl(INADDR_ANY);

	s32 ret;
	if ((ret = net_bind(server, (struct sockaddr *)&bindAddress, sizeof(bindAddress))) < 0) {
		net_close(server);
		gxprintf("Error binding socket: [%i] %s\n", -ret, strerror(-ret));
		return ret;
	}
	if ((ret = net_listen(server, 3)) < 0) {
		net_close(server);
		gxprintf("Error listening on socket: [%i] %s\n", -ret, strerror(-ret));
		return ret;
	}

	return server;
}
Exemplo n.º 4
0
		int32_t SocketInit(int &sockDesc)
		{
			#ifdef __GNUWIN32__
			WSADATA wsaData;
			if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0)
			{
				return 0;
			}
			#endif

			#ifdef __NDS__
			if ( !Wifi_InitDefault(WFC_CONNECT) )
			{
				return 0;
			}
			if ( (sockDesc = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
			{
				return 0;
			}
			#elif defined (__GAMECUBE__) || defined (__WII__)
			if ( (sockDesc = net_socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0 )
			{
				return 0;
			}
			#else
			if ( (sockDesc = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0 )
			{
				return 0;
			}
			#endif
			return 1;
		}
Exemplo n.º 5
0
NSAPI_PUBLIC SYS_NETFD INTnet_create_listener_alt(const char *ipstr, int port, PRBool internal)
{
    SYS_NETFD sd;
    struct sockaddr_in sa_server;

    if (PR_TRUE == internal)
    {
        // internal listen sockets are always created without SSL 
        sd = INTnet_socket_alt(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    }
    else
    {
        // otherwise the socket may be SSL
        sd = net_socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    };

    if (sd == SYS_NET_ERRORFD)
    {
        return SYS_NET_ERRORFD;
    };

    ZERO((char *) &sa_server, sizeof(sa_server));
    sa_server.sin_family=AF_INET;
    sa_server.sin_addr.s_addr = (ipstr ? inet_addr(ipstr) : htonl(INADDR_ANY));
    sa_server.sin_port=htons(port);
    if(net_bind(sd, (struct sockaddr *) &sa_server,sizeof(sa_server)) < 0) {
        return SYS_NET_ERRORFD;
    }
    net_listen(sd, net_listenqsize);

    return sd;
}
Exemplo n.º 6
0
s32 tcp_socket (void) {
	s32 s, res;

	s = net_socket (PF_INET, SOCK_STREAM, 0);
	if (s < 0) {
		printDebugMsg(NORMAL_DEBUG_MESSAGE,"net_socket failed: %d\n", s);
		return s;
	}

	res = net_fcntl (s, F_GETFL, 0);
	if (res < 0) {
		printDebugMsg(NORMAL_DEBUG_MESSAGE,"F_GETFL failed: %d\n", res);
		net_close (s);
		return res;
	}

	res = net_fcntl (s, F_SETFL, res | 4);
	if (res < 0) {
		printDebugMsg(NORMAL_DEBUG_MESSAGE,"F_SETFL failed: %d\n", res);
		net_close (s);
		return res;
	}

	return s;
}
Exemplo n.º 7
0
s32 tcp_socket (void) {
    s32 s, res;

    s = net_socket (PF_INET, SOCK_STREAM, 0);
    if (s < 0) {
        printf ("net_socket failed: %d\n", s);
        return s;
    }

    res = net_fcntl (s, F_GETFL, 0);
    if (res < 0) {
        printf ("F_GETFL failed: %d\n", res);
        net_close (s);
        return res;
    }

    res = net_fcntl (s, F_SETFL, res | 4);
    if (res < 0) {
        printf ("F_SETFL failed: %d\n", res);
        net_close (s);
        return res;
    }

    return s;
}
Exemplo n.º 8
0
s32 ConnectSocket(const char *hostname, u32 port)
{
	s32 socket = 0;
	struct sockaddr_in connect_addr;
	if ( (socket = net_socket(AF_INET,SOCK_STREAM,IPPROTO_IP)) < 0)
	{
		return -1;
	}
	else
	{
		//resolving hostname
		struct hostent *host = 0;
		host = net_gethostbyname(hostname);
		if ( host == NULL )
		{
			//resolving failed
			return -2;
		}
		else
		{
			connect_addr.sin_family = AF_INET;
			connect_addr.sin_port = port;
			memcpy(&connect_addr.sin_addr, host->h_addr_list[0], host->h_length);
		}
	}
	if (net_connect(socket, (struct sockaddr*)&connect_addr , sizeof(connect_addr)) == -1 )
	{
		net_close(socket);
		return -3;
	}
	return socket;

}
Exemplo n.º 9
0
static s32 tcp_socket(void)
{
	s32 s, res;

	s = net_socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
	if (s < 0)
		return s;

	// Switch off Nagle with TCP_NODELAY
	u32 nodelay = 1;
	net_setsockopt(s,IPPROTO_TCP,TCP_NODELAY,&nodelay,sizeof(nodelay));

	res = net_fcntl(s, F_GETFL, 0);
	if (res < 0)
	{
		net_close(s);
		return res;
	}

	res = net_fcntl(s, F_SETFL, res | IOS_O_NONBLOCK);
	if (res < 0)
	{
		net_close(s);
		return res;
	}

	return s;
}
Exemplo n.º 10
0
int WifiGecko_Connect()
{
	return -1;
	if(connection >= 0)
		return connection;
	
	net_init();

	connection = net_socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);

	if (connection < 0)
		return connection;

	struct sockaddr_in connect_addr;
	memset(&connect_addr, 0, sizeof(connect_addr));
	connect_addr.sin_family = AF_INET;
	connect_addr.sin_port = htons(portnumber);
	inet_aton(ipaddress, &connect_addr.sin_addr);

	if(net_connect(connection, (struct sockaddr*)&connect_addr, sizeof(connect_addr)) < 0)
	{
		WifiGecko_Close();
		return -1;
	}

	return connection;
}
Exemplo n.º 11
0
static Socket new_listening_TCP_socket(int family, uint16_t port)
{
    Socket sock = net_socket(family, TOX_SOCK_STREAM, TOX_PROTO_TCP);

    if (!sock_valid(sock)) {
        return ~0;
    }

    int ok = set_socket_nonblock(sock);

    if (ok && family == AF_INET6) {
        ok = set_socket_dualstack(sock);
    }

    if (ok) {
        ok = set_socket_reuseaddr(sock);
    }

    ok = ok && bind_to_port(sock, family, port) && (listen(sock, TCP_MAX_BACKLOG) == 0);

    if (!ok) {
        kill_sock(sock);
        return ~0;
    }

    return sock;
}
Exemplo n.º 12
0
void network_init()
{
	struct sockaddr_in my_name;

	my_name.sin_family = AF_INET;
	my_name.sin_port = htons(SERVER_PORT);
	my_name.sin_addr.s_addr = htonl(INADDR_ANY);

	net_init();

	server_socket = net_socket(AF_INET, SOCK_STREAM, 0);
	int yes = 1;
	net_setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes));

	while(net_bind(server_socket, (struct sockaddr*)&my_name, sizeof(my_name)) < 0)
	{
	}

	net_listen(server_socket, 0);

	struct sockaddr_in client_info;
	socklen_t ssize = sizeof(client_info);
	client_socket = net_accept(server_socket, (struct sockaddr*)&client_info, &ssize);

	network_printf("Hello world!\n");
}
Exemplo n.º 13
0
s32 Network_Connect(void) {
    struct hostent *he;
    struct sockaddr_in sa;
    s32 ret;
    
    /* Close socket if it is already open */
    if (sockfd >= 0) net_close(sockfd);
    
    /* Create socket */
    sockfd = net_socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    if (sockfd < 0) return sockfd;

    /* Get host by name */
    he = net_gethostbyname(NusHostname);
    if (!he) return -1;

    /* Setup socket */
    memcpy(&sa.sin_addr, he->h_addr_list[0], he->h_length);
    sa.sin_family = AF_INET;
    sa.sin_port = htons(NusPort);
    
    ret = net_connect(sockfd, (struct sockaddr *) &sa, sizeof(sa));
    if (ret < 0) return ret;
    return 0;
}
Exemplo n.º 14
0
/****************************************************************************
 * NetworkWait
 ***************************************************************************/
int NetworkWait() {

    if (!checkincomming)
        return -3;

    struct sockaddr_in sin;
    struct sockaddr_in client_address;
    socklen_t addrlen = sizeof(client_address);

    //Open socket
    socket = net_socket(AF_INET, SOCK_STREAM, IPPROTO_IP);

    if (socket == INVALID_SOCKET) {
        return socket;
    }

    sin.sin_family = AF_INET;
    sin.sin_port = htons(PORT);
    sin.sin_addr.s_addr = htonl(INADDR_ANY);

    if (net_bind(socket, (struct sockaddr*)&sin, sizeof(sin)) < 0) {
        net_close(socket);
        return -1;
    }

    if (net_listen(socket, 3) < 0) {
        net_close(socket);
        return -1;
    }

    connection = net_accept(socket, (struct sockaddr*)&client_address, &addrlen);

    sprintf(incommingIP, "%s", inet_ntoa(client_address.sin_addr));

    if (connection < 0) {
        net_close(connection);
        net_close(socket);
        return -4;

    } else {

        unsigned char haxx[9];
        //skip haxx
        net_read(connection, &haxx, 8);
		wiiloadVersion[0] = haxx[4];
		wiiloadVersion[1] = haxx[5];

        net_read(connection, &infilesize, 4);

		if (haxx[4] > 0 || haxx[5] > 4) {
			net_read(connection, &uncfilesize, 4); // Compressed protocol, read another 4 bytes
		}
        waitforanswer = true;
        checkincomming = false;
        networkHalt = true;
    }

    return 1;
}
Exemplo n.º 15
0
int net_bind(
	const char name[],
	const char addr[],
	const char port[],
	const char ifce[],
	int protocol, int af
) {
	char addrbuf[FULL_ADDSTRLEN+1];
	const int opt_on = 1;
	int sock;
	socklen_t addrlen;
	IP sockaddr;

	if( af == AF_INET ) {
		addrlen = sizeof(IP4);
	} else if( af == AF_INET6 ) {
		addrlen = sizeof(IP6);
	} else {
		log_err( "%s: Unknown address family value.", name );
		return -1;
	}

	if( addr_parse( &sockaddr, addr, port, af ) != 0 ) {
		log_err( "%s: Failed to parse IP address '%s' and port '%s'.", name, addr, port );
		return -1;
	}

	if( (sock = net_socket( name, ifce, protocol, af )) < 0 ) {
		return -1;
	}

	if( af == AF_INET6 ) {
		if( setsockopt( sock, IPPROTO_IPV6, IPV6_V6ONLY, &opt_on, sizeof(opt_on) ) < 0 ) {
			close( sock );
			log_err( "%s: Failed to set socket option IPV6_V6ONLY: %s", name, strerror( errno ));
			return -1;
		}
	}

	if( bind( sock, (struct sockaddr*) &sockaddr, addrlen ) < 0 ) {
		close( sock );
		log_err( "%s: Failed to bind socket to address: '%s'", name, strerror( errno ) );
		return -1;
	}

	if( protocol == IPPROTO_TCP && listen( sock, 5 ) < 0 ) {
		close( sock );
		log_err( "%s: Failed to listen on socket: '%s'", name, strerror( errno ) );
		return -1;
	}

	log_info( ifce ? "%s: Bind to %s, interface %s" : "%s: Bind to %s",
		name, str_addr( &sockaddr, addrbuf ), ifce
	);

	return sock;
}
Exemplo n.º 16
0
/****************************************************************************
 * Test if connection to the address is available (PING)
 ***************************************************************************/
bool CheckConnection(const char *url, float timeout)
{
	//Check if the url starts with "http://", if not it is not considered a valid url
	if (strncmp(url, "http://", strlen("http://")) != 0)
		return false;

	//Locate the path part of the url by searching for '/' past "http://"
	char *path = strchr(url + strlen("http://"), '/');

	//At the very least the url has to end with '/', ending with just a domain is invalid
	if (path == NULL)
		return false;

	//Extract the domain part out of the url
	int domainlength = path - url - strlen("http://");
	if (domainlength == 0)
		return false;

	char domain[domainlength + 1];
	strlcpy(domain, url + strlen("http://"), domainlength + 1);

	//Parsing of the URL is done, start making an actual connection
	u32 ipaddress = getipbynamecached(domain);
	if (ipaddress == 0)
		return false;

	//Initialize socket
	s32 connection = net_socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
	if (connection < 0) return connection;

	s32 flags = net_fcntl(connection, F_GETFL, 0);
	if (flags >= 0) flags = net_fcntl(connection, F_SETFL, flags | 4);

	struct sockaddr_in connect_addr;
	memset(&connect_addr, 0, sizeof(connect_addr));
	connect_addr.sin_family = AF_INET;
	connect_addr.sin_port = 80;
	connect_addr.sin_addr.s_addr = getipbynamecached(domain);

	Timer netTime;

	int res = -1;
	while(res < 0 && res != -127 && netTime.elapsed() < timeout)
	{
		res = net_connect(connection, (struct sockaddr*) &connect_addr, sizeof(connect_addr));
		usleep(1000);
	}

	net_close(connection);

	return !(res < 0 && res != -127);
}
Exemplo n.º 17
0
int WaitForConnection(int& server_socket)
{
	int addrlen;
	struct sockaddr_in my_name, peer_name;
	int status;

	server_socket = net_socket(AF_INET, SOCK_STREAM, 0);
	if (server_socket == -1)
	{
		printf("Failed to create server socket\n");
	}
	int yes = 1;
	net_setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));

	memset(&my_name, 0, sizeof(my_name));
	my_name.sin_family = AF_INET;
	my_name.sin_port = htons(DFF_CONN_PORT);
	my_name.sin_addr.s_addr = htonl(INADDR_ANY);

	status = net_bind(server_socket, (struct sockaddr*)&my_name, sizeof(my_name));
	if (status == -1)
	{
		printf("Failed to bind server socket\n");
	}

	status = net_listen(server_socket, 5); // TODO: Change second parameter..
	if (status == -1)
	{
		printf("Failed to listen on server socket\n");
	}
	printf("Listening now!\n");

	int client_socket = -1;

	struct sockaddr_in client_info;
	socklen_t ssize = sizeof(client_info);
	int new_socket = net_accept(server_socket, (struct sockaddr*)&client_info, &ssize);
	if (new_socket < 0)
	{
		printf("accept failed!\n");
	}
	else
	{
		client_socket = new_socket;
		printf("accept succeeded and returned %d\n", client_socket);
	}

	return client_socket;
}
Exemplo n.º 18
0
static int32_t init_http_socket( struct CSession_t *pThis, const CSessionParam *pSessionParam )
{
	int32_t iRetCode = -1;
	CSocket *pTCPSocket = NULL;
	
	if ( pThis->pSocket )
	{
		iRetCode = 0;
		
		return iRetCode;
	}
		
	pTCPSocket = net_socket( SOCKET_TYPE_STREAM, 0 );
	if ( pTCPSocket )
	{
		CNetAddr addr;
		char tempBuf[1024] = { 0x00, };
		int32_t iLen = 0;
				
		memset( &addr, 0x00, sizeof(addr) );
				
		memcpy( addr.pIP, pSessionParam->pIP, strlen(pSessionParam->pIP) );
		addr.iPort = pSessionParam->iPort;
		
		if ( net_connect( pTCPSocket, &addr ) >= 0 )
		{
			if ( add_reactor_socket( pThis->pOwnerReactor, pTCPSocket, pThis ) >= 0 )
			{
				if ( net_set_socket( pTCPSocket, SOCKET_OPTION_NONE_BLOCK, NULL, 0 ) >= 0 )
				{
					pThis->pSocket = pTCPSocket;
						
					iRetCode = 0;
				}	
				else 
					log_print( "set none blocking socket failed???????????????" );
			}
			else 
				log_print( "add reactor socket failed???????????????????" );
		}
		else 
			log_print( "connect failed????????????????" );
	}
	else 
		log_print( "create tcp socket failed???????????????????????" );
	
	return iRetCode;	
}
Exemplo n.º 19
0
/**
 * Connect to a remote server via TCP on a specified port
 *
 * @param u32 ip address of the server to connect to
 * @param u32 the port to connect to on the server
 * @return s32 The connection to the server (negative number if connection could not be established)
 */
static s32 server_connect(u32 ipaddress, u32 socket_port) {
	//Initialize socket
	s32 connection = net_socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
	if (connection < 0) return connection;

	struct sockaddr_in connect_addr;
	memset(&connect_addr, 0, sizeof(connect_addr));
	connect_addr.sin_family = AF_INET;
	connect_addr.sin_port = socket_port;
	connect_addr.sin_addr.s_addr= ipaddress;

	//Attemt to open the socket
	if (net_connect(connection, (struct sockaddr*)&connect_addr, sizeof(connect_addr)) == -1) {
		net_close(connection);
		return -1;
	}
	return connection;
}
Exemplo n.º 20
0
void
NetworkConsole::Init()
{
	printf("Initializing Network\n");
	
	int Connect = net_init();
	if(Connect != 0)
	{
		printf("Net_Init() failed.\n");
	}
	else
	{
		printf("Net_Init() successful.\n\n");
		
		printf("Net_Socket Initializing.\n");
		Data->netSocket = net_socket(AF_INET, SOCK_DGRAM, 0);
		
		if(Data->netSocket == INVALID_SOCKET)
		{
			printf("Net_Socket Initialization failed.\n");
		}
		else
		{
			printf("Net_Socket Initialized.\n\n");
			printf("Establishing server on port %d.\n",MULTICAST_PORT);
			
			Data->sin.sin_port=htons(MULTICAST_PORT);
			Data->sin.sin_addr.s_addr=inet_addr(MULTICAST_GROUP);//replace with multicast destination
			Data->sin.sin_family=AF_INET;
			if(net_bind(Data->netSocket,(sockaddr*)&(Data->sin), sizeof(Data->sin)) == SOCKET_ERROR)
			{
				printf("Failed to bind.\n");
			}
			else
			{
				printf("Server established!\n");
				if(net_connect(Data->netSocket,(sockaddr*)&(Data->sin), sizeof(Data->sin))==-1)
				{
					printf("net_connect Error\n");
				}
			}
		}
	}
}
Exemplo n.º 21
0
static s32 helper_setup_socket( u16 port)
{
	s32 sock;
	int ret;
	//u32	clientlen;
	struct sockaddr_in server;
	struct sockaddr_in client;
	
	//clientlen = sizeof(client);

	sock = net_socket (AF_INET, SOCK_STREAM, IPPROTO_IP);

	if (sock == INVALID_SOCKET) {
		printf( "setup():INVALID_SOCKET\n");
		return -1;
	}

	memset (&server, 0, sizeof (server));
	memset (&client, 0, sizeof (client));

	server.sin_family = AF_INET;
	server.sin_port = htons (port);
	server.sin_addr.s_addr = INADDR_ANY;
	ret = net_bind (sock, (struct sockaddr *) &server, sizeof (server));
		
	if ( ret ) {
		printf( "net_bind():INVALID_SOCKET\n");
		net_close( sock); 
		return -1;
	}

	if ( (ret = net_listen( sock, 1)) ) {
		printf( "net_listen():INVALID_SOCKET\n");
		net_close( sock);
		return -1;
	}

#if	0
	ret = setNonblocking(sock);
	printf( "setNonblocking(%d) returns=%d.\n", sock, ret);
#endif
	return sock;
}
Exemplo n.º 22
0
Arquivo: net.c Projeto: ikle/test-net
/*
 * The function net_connect() create the socket and connects it to the
 * address specified by node:service pair. If node is NULL, then the network
 * address will be set to the loopback interface address.
 *
 * If the node/servise name resolution, socket creation and connection
 * succeeds, socket is returned. On error, negative error code is returned.
 */
int net_connect (int type, const char *node, const char *service)
{
	struct addrinfo *res;
	int s, saved_errno;

	/* using first resource record element... */
	if ((s = net_socket (type, node, service, &res, 0)) < 0)
		return s;

	if (connect (s, res->ai_addr, res->ai_addrlen) == -1) {
		saved_errno = errno;
		freeaddrinfo (res);
		close (s);
		return -saved_errno;
	}

	freeaddrinfo (res);
	return s;
}
Exemplo n.º 23
0
bool ClientSocket::Connect(const std::string& serverName, int port)
{
  AMJU_CALL_STACK;

  struct sockaddr_in sa;
  struct hostent *hp;

#ifdef GEKKO
  hp = net_gethostbyname(serverName.c_str());
#else
  hp = gethostbyname(serverName.c_str());
#endif

  if (!hp) 
  { 
    return false;                                
  }

  memset(&sa,0,sizeof(sa));
  memcpy((char *)&sa.sin_addr,hp->h_addr,hp->h_length);     
  sa.sin_family= hp->h_addrtype;
  sa.sin_port= htons((u_short)port);

#ifdef GEKKO
  if ((m_socket = net_socket(hp->h_addrtype,SOCK_STREAM,0)) < 0) 
#else
  if ((m_socket = socket(hp->h_addrtype,SOCK_STREAM,0)) < 0) 
#endif
  {
    return false;
  }

#ifdef GEKKO
  if (net_connect(m_socket,(struct sockaddr *)&sa,sizeof sa) < 0) 
#else
  if (connect(m_socket,(struct sockaddr *)&sa,sizeof sa) < 0) 
#endif
  {
    return false;
  }
  return true;
}
Exemplo n.º 24
0
int create_send_socket( void ) {
	int sock_send;

	sock_send = net_socket( "LPD", gconf->dht_ifce, IPPROTO_UDP, gconf->af );

	if( multicast_set_ttl( sock_send, gconf->af, 1 ) < 0 ) {
		log_err( "LPD: Failed to set IP_MULTICAST_TTL for sending socket: %s", strerror( errno ));
		goto fail;
	}

	if( multicast_set_loop( sock_send, gconf->af, 0 ) < 0 ) {
		log_warn( "LPD: Failed to set IP_MULTICAST_LOOP: %s", strerror( errno ) );
		goto fail;
	}

	return sock_send;

fail:
	close( sock_send );
	return -1;
}
Exemplo n.º 25
0
/**
 * Connect to a remote server via TCP on a specified port
 *
 * @param u32 ip address of the server to connect to
 * @param u32 the port to connect to on the server
 * @return s32 The connection to the server (negative number if connection could not be established)
 */
static s32 tcp_connect(u32 ipaddress, u16 socket_port)
{
	//Initialize socket
	s32 connection = net_socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
	if (connection < 0) return connection;

	struct sockaddr_in connect_addr;
	memset(&connect_addr, 0, sizeof(connect_addr));
	connect_addr.sin_family = AF_INET;
	connect_addr.sin_port = htons(socket_port);
	connect_addr.sin_addr.s_addr = ipaddress;

	sprintf(incommingIP, "%s", inet_ntoa(connect_addr.sin_addr));

	//Attempt to open the socket
	if (net_connect(connection, (struct sockaddr*) &connect_addr, sizeof(connect_addr)) == -1)
	{
		net_close(connection);
		return -1;
	}
	return connection;
}
Exemplo n.º 26
0
s32 tcp_socket (void) {
	s32 s, res;

	s = net_socket (PF_INET, SOCK_STREAM, 0);
	if (s < 0) {
		return s;
	}

	res = net_fcntl (s, F_GETFL, 0);
	if (res < 0) {
		net_close (s);
		return res;
	}

	res = net_fcntl (s, F_SETFL, res | 4);
	if (res < 0) {
		net_close (s);
		return res;
	}

	return s;
}
Exemplo n.º 27
0
int WifiGecko_Connect()
{
	if(connection >= 0)
		return connection;

	connection = net_socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
	if (connection < 0)
		return connection;

	struct sockaddr_in connect_addr;
	memset(&connect_addr, 0, sizeof(connect_addr));
	connect_addr.sin_family = AF_INET;
	connect_addr.sin_port = htons(DESTINATION_PORT);
	inet_aton(DESTINATION_IP, &connect_addr.sin_addr);

	if(net_connect(connection, (struct sockaddr*)&connect_addr, sizeof(connect_addr)) < 0)
	{
		WifiGecko_Close();
		return -1;
	}

	return connection;
}
Exemplo n.º 28
0
s32 tcp_socket (void) {
	s32 s, res;

	s = net_socket (PF_INET, SOCK_STREAM, 0);
	if (s < 0) return s;

	if(http_port == 80)
	{
		res = net_fcntl (s, F_GETFL, 0);
		if (res < 0) {
			net_close (s);
			return res;
		}
		//set non-blocking
		res = net_fcntl (s, F_SETFL, res | 4);
		if (res < 0) {
			net_close (s);
			return res;
		}
	}

	return s;
}
Exemplo n.º 29
0
int InitNetwork(NET_STATE* ref)
{
  int ret, result;
  ret = if_config(ref->localip, ref->netmask, ref->gateway, TRUE);
  if (ret < 0) {
    return -1;
  }

  ref->socket = net_socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
  if (ref->socket == INVALID_SOCKET) {
    return -1;
  }

  memset(&ref->sockAddr, 0, sizeof(ref->sockAddr));
  ref->sockAddr.sin_family = AF_INET;
  ref->sockAddr.sin_port = htons(NETWORK_PORT_A);
  ref->sockAddr.sin_addr.s_addr = inet_addr(HOST_IP);

  /*
    getaddrinfo(HOST_NAME, STR(HOST_IP), NULL, &addrinfo);
  */

  result = net_connect(ref->socket, (struct sockaddr *)&ref->sockAddr, sizeof(ref->sockAddr));
  if (result == -1) {
    net_close(ref->socket);
    return -1;
  }

  if (LWP_CreateThread(&ref->thread_handle, NetworkThread, (void*)ref, NULL, 256*1024, 60) < 0)
  {
    ref->threadTerminated = 1;
    return -1;
  }

  return 0;
}
Exemplo n.º 30
0
int main( int argc, char **argv )
{
	int32_t iRetCode = -1;
	CReactor *iUDPReactorId = NULL;
	int8_t pLocalIP[32] = "225.0.0.37";
	CThread *acceptTid = NULL;
	
	enable_log( 1 );
	set_log( LOG_TYPE_CONSOLE, NULL, 0 );
	
	if ( strlen( pLocalIP ) <= 0 )
		if ( net_get_local_ip( pLocalIP, sizeof( pLocalIP ) ) < 0 )
			return iRetCode;
	
	log_print( "%s %s:%d local ip-->%s\r\n", __FILE__, __FUNCTION__, __LINE__, pLocalIP );

	if ( init_pine_system(  ) < 0 )
		return iRetCode;
	
	iUDPReactorId = net_reactor(  );
	if ( iUDPReactorId )
	{
		if ( register_reactor_callback( iUDPReactorId, udp_reactor_callback, NULL ) < 0 )
		{	
			log_print( "%s %s:%d register reactor callback failed???????????\r\n", __FILE__, __FUNCTION__, __LINE__ );
			return iRetCode;
		}
		
		iUDPClientSocketId = net_socket( SOCKET_TYPE_DGRAM, 0 );
		if ( iUDPClientSocketId )
		{
			CNetAddr addr, stLocalAddr;
			char tempBuf[1024] = { 0x00, };
			int32_t iLen = 0;
			
			memset( &addr, 0x00, sizeof(addr) );
			memset( &stLocalAddr, 0x00, sizeof(stLocalAddr) );
			memcpy( addr.pIP, pLocalIP, strlen(pLocalIP) );
			addr.iPort = LOCAL_PORT;
			
			memcpy( stLocalAddr.pIP, pLocalIP, strlen(pLocalIP) );
			stLocalAddr.iPort = LOCAL_PORT + 1;

			if ( net_bind( iUDPClientSocketId, &stLocalAddr ) < 0 )
			{
				log_print( "%s %s:%d socket bind failed???????????\r\n", __FILE__, __FUNCTION__, __LINE__ );
				
				return iRetCode;	
			}
			else 
				log_print( "bind ok.............." );
				
			if ( net_connect( iUDPClientSocketId, &addr ) < 0 )
			{
				log_print( "%s %s:%d socket connect failed???????????\r\n", __FILE__, __FUNCTION__, __LINE__ );
				
				return iRetCode;	
			}
			else 
				log_print( "connect ok.............." );
			
			if ( add_reactor_socket( iUDPReactorId, iUDPClientSocketId, NULL ) < 0 )
			{
				log_print( "%s %s:%d set add reactor socket failed???????????\r\n", __FILE__, __FUNCTION__, __LINE__ );
				
				return iRetCode;	
			}
			else 
				log_print( "add reactor socket ok................." );
			
			if ( net_set_socket( iUDPClientSocketId, SOCKET_OPTION_NONE_BLOCK, NULL, 0 ) < 0 )
			{
				log_print( "%s %s:%d set socket none block failed???????????\r\n", __FILE__, __FUNCTION__, __LINE__ );
				
				return iRetCode;
			}
			else 
				log_print( "set socket none blocking ok....................." );
			
			
			log_print( "multicast client is running.............." );
			
			
			while ( fgets(tempBuf, sizeof(tempBuf), stdin) )
			{
				int32_t iOpRet = net_sendto( iUDPClientSocketId, tempBuf, strlen(tempBuf) + 1, &addr );	
				
				log_print( "udp client: iOpRet->%d", iOpRet );
			}
		}
	}

		
		
		while ( 1 )
			os_sleep( 1000 );
			
		net_close_reactor( iUDPReactorId );
	
		return 0;
}