Пример #1
0
bool Server::init ()
{
    std::cout<<"Initializating Server"<<std::endl;

    #ifdef WIN32
        m_version	= MAKEWORD(2,0);
        m_error		= WSAStartup(m_version, &m_wsaData);
        if(m_error != 0) return false;
        if(LOBYTE(m_wsaData.wVersion) != 2 || HIBYTE(m_wsaData.wVersion) != 0)
        {
            WSACleanup();
            return false;
        }
    #endif

        int socketfd = CreateSocket();

    if(socketfd == INVALID_SOCKET)
    {
        #ifdef WIN32
            WSACleanup();
        #endif

        return false;
    }

    m_server = socketfd;

    if (!bindServer() || !Listen())
    {
        return false;
    }

    u_long iMode = 1;

    int iResult = ioctlsocket(m_server, FIONBIO, &iMode);

    if (iResult != NO_ERROR)
    {
        printf("ioctlsocket failed with error: %ld\n", iResult);

        return false;
    }

    return true;
}
Пример #2
0
int createUDPServer(int port)
{
    int server_udp;

    if (1 > port)
    {
    	return -1;
    }

    server_udp = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (-1 == server_udp) 
    {
        perror("socket:");
        return -1;
    }

    /* server socket is nonblocking */
    if (-1 == set_nonblock_fd(server_udp)) 
    {
        perror("set_nonblock_fd:");
        close(server_udp);
        return -1;
    }

    /* close server socket on exec so cgi's can't write to it */
    if (-1 == fcntl(server_udp, F_SETFD, 1)) 
    {
        perror("fcntl:");
        close(server_udp);
        return -1;
    }

    /* internet family-specific code encapsulated in bindServer()  */
    if (-1 == bindServer(server_udp, NULL, port)) 
    {
        perror("bind:");
        close(server_udp);
        return -1;
    }

    return server_udp;
}
Пример #3
0
/*
 * For Receive Clients Request
 */
int createTCPServer(int port)
{
    int server_s;
	int sock_opt = 1;
	char localIP[IP_LENGTH] = {0};

    server_s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (-1 == server_s) 
    {
		perror("socket:");
		return -1;
    }

    /* server socket is nonblocking */
    if (-1 == set_nonblock_fd(server_s))
    {
    	close(server_s);
    	perror("set_nonblock_fd:");
		return -1;
    }

    /* close server socket on exec so cgi's can't write to it */
    if (-1 == fcntl(server_s, F_SETFD, 1)) 
    {
    	close(server_s);
    	perror("fcntl:");
		return -1;
    }

    /* reuse socket addr */
    if (-1 == setsockopt(server_s, SOL_SOCKET, SO_REUSEADDR, (void *)&sock_opt, sizeof(sock_opt)))
    {
    	close(server_s);
		perror("setsockopt:");
		return -1;
    }

    /* internet family-specific code encapsulated in bind_server()  */

    if (-1 == getIP(ETH_NAME, localIP))
    {
    	close(server_s);
    	printf("[%s][%d] ERROR: get IP addr. \n", __FILE__, __LINE__);
    	return -1;
    }
    
    if (-1 == bindServer(server_s, NULL, port)) 
    {
    	close(server_s);
    	perror("bind:");
		return -1;
    }

    /* listen: large number just in case your kernel is nicely tweaked */
    if (listen(server_s, ONVIF_TCP_MAXCONN) == -1) 
    {
    	close(server_s);
		perror("listen:");
		return -1;
    }

    return server_s;
}
Пример #4
0
void startServer(){
	puts("Server Mode Starting...");
	char* movieDir = getenv("NUTELLA");
	if(!movieDir){
		fprintf(stderr,"Error: NUTELLA variable not set, please set $NUTELLA to a movie directory.\n");
		exit(1);
	}

	char hostname[1028];
	hostname[1023] = '\0';
	gethostname(hostname, 1023);
	strcat(hostname, ":7777");
	int querySock = msockcreate(RECV, QUERYGROUP, QUERYPORT);
	int responseSock = msockcreate(SEND, RESPGROUP, RESPPORT);
	if(querySock == -1){
		fprintf(stderr, "Error: Could not create query socket.");
		exit(-1);
	}
	if(responseSock == -1){
		fprintf(stderr, "Error: Could not create response socket.");
		exit(-1);
	}
	char* query = calloc(256, sizeof(char));
	int receivedLength;
	int port = 7777;
	DIR *dp;
	struct dirent *d;

	while(1)
	{
		puts("Now waiting for queries...");
		receivedLength = mrecv(querySock, query, 256);
		printf("Received Query for: %s\n", query);

		dp = opendir(movieDir);
		if (dp == NULL) {
			fprintf(stderr, "ERROR: Couldn't open movie directory.\n");
			exit(-1);
		}

		d = readdir(dp);
		while (d) {
			if(!strcmp(d->d_name, query))
				break;
			d = readdir(dp);
		}
		closedir(dp);
		if(d)
		{
			msend(responseSock, hostname, strlen(hostname));
			printf("Movie Found! Sending  IP and port: %s\n", hostname);
			char* file = malloc(strlen(query) + strlen(movieDir) + 1);
			strcpy(file, movieDir);
			strcat(file, "/");
			strcat(file, query);
			bindServer(file);
		}else{
			puts("Movie not found.");
		}
		d =NULL;
		memset(query, 0, 256);
	}
}