コード例 #1
0
ファイル: NetworkManager.cpp プロジェクト: Convery/npRouter
    bool Bind(ConnectionWrapper *Connection, std::string LocalAddress, int32_t Port)
    {
#ifdef _WIN32
        InitializeWinsock();
#endif
        if (Port < 0)
            return false;

        // Create a new socket.
        if (Connection->Handle.Datagram.Socket == nullptr)
            Connection->Handle.Datagram.Socket = (void *)socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
        if (Connection->Handle.Datagram.Socket == nullptr)
            return false;

        // Prepare an address structure.
        sockaddr_in AddressInfo;
        AddressInfo.sin_family = AF_INET;
        AddressInfo.sin_port = htons(Port);
        if (LocalAddress.size() > 1)
            InetPton(AF_INET, LocalAddress.c_str(), &AddressInfo.sin_addr);
        else
            AddressInfo.sin_addr.S_un.S_addr = INADDR_ANY;

        // Bind to the port.
        return bind((SOCKET)Connection->Handle.Datagram.Socket, (sockaddr *)&AddressInfo, sizeof(AddressInfo)) != SOCKET_ERROR;
    }
コード例 #2
0
ファイル: ITGapi.cpp プロジェクト: ThisIsLawlor/SimpleSDN
int DITGsend(char *sender, char *message)
{
#ifdef WIN32
	if (InitializeWinsock(MAKEWORD(1,1)) != 1)	{
		fprintf(stderr, "WSAStartup() failed");
		exit(1);
	}
#endif

	struct addrinfo* locale = 0;
	
	freeaddrinfo(locale);


	
	getaddrinfo("0.0.0.0", NULL, NULL, &locale);
	socket_r = socket(locale->ai_family, SOCK_DGRAM, 0);
	if (socket_r  < 0)
		printf("error into create a socket  - DITGSend function \n");	

#ifdef UNIX
	int flags;
	flags = fcntl(socket_r, F_GETFL, 0);
	fcntl(socket_r, F_SETFL, flags | O_NONBLOCK);
#endif

#ifdef WIN32
	unsigned long i = 1;
	ioctlsocket(socket_r, FIONBIO, &i);
#endif


	
	
	
	


	struct sockaddr_in Sender;
        struct hostent *host;

        Sender.sin_family = AF_INET;
        if (!(host = gethostbyname(sender))) {
                cerr << endl << "DITGsend: Invalid destination address" << endl;
                return -1;
        }
        memcpy((char *) &Sender.sin_addr, host->h_addr, host->h_length);
        Sender.sin_port = htons(DEFAULT_PORT_SENDER_MANAGER);
        if (sendto(socket_r, message, strlen(message), 0, (struct sockaddr *) &Sender,  sizeof(Sender)) != (int) strlen(message))
                return -1;
        return 0;
}
コード例 #3
0
ファイル: Win32SocketsMain.cpp プロジェクト: kiewic/Projects
int wmain(int argc, wchar_t* argv[])
{
    int result = 0;
    HRESULT hr = S_OK;

    if (FAILED(InitializeWinsock()))
    {
        return 1;
    }

    if (argc < 3)
    {
        PrintHelp(argv[0]);
    }
    else if (argc >= 2 && _wcsicmp(argv[1], L"tcp") == 0 && _wcsicmp(argv[2], L"server") == 0)
    {
        result = DoTcpServer();
    }
    else if (_wcsicmp(argv[1], L"tcp") == 0 && _wcsicmp(argv[2], L"client") == 0)
    {
        result = DoTcpClient();
    }
    else if (_wcsicmp(argv[1], L"udp") == 0 && _wcsicmp(argv[2], L"receive") == 0)
    {
        result = DoUdpReceive();
    }
    else if (_wcsicmp(argv[1], L"udp") == 0 && _wcsicmp(argv[2], L"send") == 0)
    {
        result = DoUdpSend();
    }
    else if (_wcsicmp(argv[1], L"dns") == 0)
    {
        hr = DoDns(argv[2]);
    }
    else {
        PrintHelp(argv[0]);
    }

    // Clean.
    WSACleanup();

    if (FAILED(hr))
    {
        return hr;
    }

    return result;
}
コード例 #4
0
bool socketTransfertClient::Connect(char *ipaddress, int port)
{
	if (!InitializeWinsock())
		return false;


	struct sockaddr_in ipv4addr;
	ipv4addr.sin_family = AF_INET;
	ipv4addr.sin_port = htons(port);
	inet_ptonx(AF_INET, ipaddress, &ipv4addr.sin_addr);
	if (connect(m_clientSocket, reinterpret_cast<struct sockaddr*>(&ipv4addr), sizeof(ipv4addr)) != 0)
	{
		WSACleanup();
		return false;
	}
	m_isConnected = true;
	u_long blockingmode = 1;
	ioctlsocket(m_clientSocket, FIONBIO, &blockingmode);
	return true;
}
コード例 #5
0
ファイル: NetworkManager.cpp プロジェクト: Convery/npRouter
    // Create a connection.
    bool Connect(ConnectionWrapper *Connection, std::string Hostname, int32_t Port)
    {
#ifdef _WIN32
        InitializeWinsock();
#endif

        // Resolve the hostname.
        auto AddressInfo = ResolveHostname(Connection->Type == eConnection::STREAMED, Hostname, Port);
        if (AddressInfo == nullptr) return false;

        // Disconnect from the previous connection if reused.
        if (Connection->Handle.Streamed.Connected)
        {
            Shutdown(Connection);
            Connection->Handle.Streamed.Connected = false;
        }

        // Create a new socket.
        if (Connection->Handle.Streamed.Socket == nullptr)
            Connection->Handle.Streamed.Socket = (void *)socket(AddressInfo->ai_family, AddressInfo->ai_socktype, IPPROTO_TCP);
        if (Connection->Handle.Streamed.Socket == nullptr)
        {
            freeaddrinfo(AddressInfo);
            return false;
        }

        // Set non-blocking mode on the socket.
        u_long Nonblocking = 1;
#ifdef _WIN32        
        ioctlsocket((SOCKET)Connection->Handle.Streamed.Socket, FIONBIO, &Nonblocking);
#else
        ioctl(Connection->Handle.Streamed.Socket, FIONBIO, &Nonblocking);
#endif

        // Connect to the address.
        if (connect((SOCKET)Connection->Handle.Streamed.Socket, AddressInfo->ai_addr, AddressInfo->ai_addrlen) != 0)
        {
#if _WIN32
            if (WSAGetLastError() == WSAEWOULDBLOCK)
#else
            if (errno == EINPROGRESS)
#endif
            {
                // Poll until the connection completes or times out.
                auto Starttime = std::chrono::steady_clock::now();
                timeval Timeout;
                fd_set  WFDs;

                // Set timeout to 5 sec.
                Timeout.tv_sec = 5;
                Timeout.tv_usec = 0;

                // Set the file descriptors.
                FD_ZERO(&WFDs);
                FD_SET((SOCKET)Connection->Handle.Streamed.Socket, &WFDs);

                // Poll the connection.
                if (select((int)Connection->Handle.Streamed.Socket + 1, NULL, &WFDs, NULL, &Timeout) > 0 && FD_ISSET((SOCKET)Connection->Handle.Streamed.Socket, &WFDs))
                {
                    freeaddrinfo(AddressInfo);
                    return true;
                }
            }
            else
            {
                freeaddrinfo(AddressInfo);
                return false;
            }
        }

        return true;
    }