Example #1
0
		//! Create the stream and associates a file descriptor
		SocketServerStream(const std::string& targetName) :
			Stream("tcpin"),
			SelectableStream("tcpin")
		{
			target.add("tcpin:port=5000;address=0.0.0.0");
			target.add(targetName.c_str());
			
			IPV4Address bindAddress(target.get("address"), target.get<int>("port"));
			
			// create socket
			fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
			if (fd < 0)
				throw DashelException(DashelException::ConnectionFailed, errno, "Cannot create socket.");
			
			// reuse address
			int flag = 1;
			if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof (flag)) < 0)
				throw DashelException(DashelException::ConnectionFailed, errno, "Cannot set address reuse flag on socket, probably the port is already in use.");
			
			// bind
			sockaddr_in addr;
			addr.sin_family = AF_INET;
			addr.sin_port = htons(bindAddress.port);
			addr.sin_addr.s_addr = htonl(bindAddress.address);
			if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) != 0)
				throw DashelException(DashelException::ConnectionFailed, errno, "Cannot bind socket to port, probably the port is already in use.");
			
			// Listen on socket, backlog is sort of arbitrary.
			if(listen(fd, 16) < 0)
				throw DashelException(DashelException::ConnectionFailed, errno, "Cannot listen on socket.");
		}
Example #2
0
bool SessionManager::init(int argc, char *argv[])
{
	srand(time(&curTime));

	option.load(argc, argv);

	if (!initDB())
		return false;

	s2s->connect(option.s2s_ip, option.s2s_port, 30);

	if (!createSocket(SOCK_STREAM))
		return false;

	if (!bindAddress(option.sm_ip, option.sm_port)) {
		ICQ_LOG("Can not bind on port %d\n", option.sm_port);
		return false;
	}

	listen(sockfd, 5);
	addEvent(SOCKET_READ);

	ICQ_LOG("sm is now started\n");
	return true;
}
Example #3
0
void webserver_loop() {
    dmd_log(LOG_INFO, "in function %s, starting webserver main loop.\n",
            __func__);

    int serverfd = newSocket();
    webserver_serverAddr = newAddress();
    bindAddress(serverfd, webserver_serverAddr);
    listenAddress(serverfd);

    struct epoll_event events[MAX_EPOLL_EVENT];
    int epollfd = newEpollSocket();

    dmd_log(LOG_DEBUG, "in function %s, begin to work\n", __func__);
    addSockfd(epollfd, serverfd);
    while (1) {
        int ret = epoll_wait(epollfd, events, MAX_EPOLL_EVENT, -1);
        dmd_log(LOG_DEBUG, "in function %s, after epoll wait\n", __func__);
        if (ret < 0) {
            dmd_log(LOG_ERR, "in function %s, epoll failure\n", __func__);
        } else {
            handleEvent(epollfd, serverfd, events, ret);
        }
    }  // while

    closeSocket(serverfd);
    releaseAddress(webserver_serverAddr);
}
Example #4
0
/*
-- FUNCTION: initializeServer
--
-- DATE: March 12, 2011
--
-- REVISIONS: September 22, 2011 - Added some extra comments about failure and
-- a function call to set the socket into non blocking mode.
--
-- DESIGNER: Luke Queenan
--
-- PROGRAMMER: Luke Queenan
--
-- INTERFACE: void initializeServer(int *listenSocket, int *port);
--
-- RETURNS: void
--
-- NOTES:
-- This function sets up the required server connections, such as creating a
-- socket, setting the socket to reuse mode, binding it to an address, and
-- setting it to listen. If an error occurs, the function calls "systemFatal"
-- with an error message.
*/
void initializeServer(int *listenSocket, int *port)
{
    // Create a TCP socket
    if ((*listenSocket = tcpSocket()) == -1)
    {
        systemFatal("Cannot Create Socket!");
    }
    
    // Allow the socket to be reused immediately after exit
    if (setReuse(&(*listenSocket)) == -1)
    {
        systemFatal("Cannot Set Socket To Reuse");
    }
    
    // Bind an address to the socket
    if (bindAddress(&(*port), &(*listenSocket)) == -1)
    {
        systemFatal("Cannot Bind Address To Socket");
    }
    
    // Set the socket to listen for connections
    if (setListen(&(*listenSocket)) == -1)
    {
        systemFatal("Cannot Listen On Socket");
    }
}
Example #5
0
/*
-- FUNCTION: createTransferSocket
--
-- DATE: September 29, 2011
--
-- REVISIONS: (Date and Description)
--
-- DESIGNER: Luke Queenan
--
-- PROGRAMMER: Luke Queenan
--
-- INTERFACE: void createTransferSocket(int *socket);
--
-- RETURNS: void
--
-- NOTES:
-- This function creates a transfer socket for the server to communicate with
-- the client. The socket is bound to port 7000.
*/
void createTransferSocket(int *socket)
{
    int *defaultPort = (int*)malloc(sizeof(int));
    *defaultPort = TRANSFER_PORT;
    
    // Create a TCP socket
    if ((*socket = tcpSocket()) == -1)
    {
        systemFatal("Cannot Create Socket!");
    }
    
    // Allow the socket to be reused immediately after exit
    if (setReuse(socket) == -1)
    {
        systemFatal("Cannot Set Socket To Reuse");
    }
    
    // Bind an address to the socket
    if (bindAddress(defaultPort, socket) == -1)
    {
        systemFatal("Cannot Bind Address To Socket");
    }
    
    free(defaultPort);
}
Example #6
0
/*
-- FUNCTION: initializeServer
--
-- DATE: September 23, 2011
--
-- REVISIONS:
--
-- DESIGNER: Karl Castillo
--
-- PROGRAMMER: Karl Castillo
--
-- INTERFACE: void initalizeServer(int* port, int* socket)
--				port - the port the client will listen on
--				socket - the socket that will hold the new socket
--
-- RETURNS: void
--
-- NOTES:
-- This function will create the socket, set reuse and listen for any incoming
-- connections from the server.
*/
void initalizeServer(int* port, int* socket)
{
    int sock = 0;

    // Create a TCP socket
    if ((sock = tcpSocket()) == -1) {
        systemFatal("Cannot Create Socket!");
    }
    
    // Allow the socket to be reused immediately after exit
    if (setReuse(&sock) == -1) {
        systemFatal("Cannot Set Socket To Reuse");
    }
    
    // Bind an address to the socket
    if (bindAddress(port, &sock) == -1) {
        systemFatal("Cannot Bind Address To Socket");
    }
    
    // Set the socket to listen for connections
    if (setListen(&sock) == -1) {
        systemFatal("Cannot Listen On Socket");
    }
    
    if((*socket = acceptConnection(&sock)) == -1) {
    	systemFatal("Cannot Accept on Socket");
    }
    close(sock);
}
Example #7
0
String WebInspectorServer::inspectorUrlForPageID(int pageId)
{
    if (pageId <= 0 || serverState() == Closed)
        return String();
    StringBuilder builder;
    builder.appendLiteral("http://");
    builder.append(bindAddress());
    builder.append(':');
    builder.appendNumber(port());
    builder.append(remoteInspectorPagePath());
    builder.appendNumber(pageId);
    return builder.toString();
}
Example #8
0
bool ListenSocket::listen(uint32 ip, int port)
{
	if (!createSocket(SOCK_STREAM))
		return false;

	if (!bindAddress(ip, port)) {
		ICQ_LOG("Can not bind on port %d\n", port);
		return false;
	}

	::listen(sockfd, 5);
	addEvent(SOCKET_READ);
	return true;
}
Example #9
0
bool LogApp::init(int argc, char *argv[])
{
	option.load(argc, argv);

	if (!createSocket(SOCK_STREAM))
		return false;

	if (!bindAddress(option.ip, option.port)) {
		ICQ_LOG("Can not bind on port %d", option.port);
		return false;
	}

	listen(sockfd, 5);

	addEvent(SOCKET_READ);

	ICQ_LOG("logd is now started\n");
	return true;
}
Example #10
0
		//! Create as UDP socket stream on a specific port
		UDPSocketStream(const string& targetName) :
			Stream("udp"),
			MemoryPacketStream("udp"),
			SelectableStream("udp"),
			selectWasCalled(false)
		{
			target.add("udp:port=5000;address=0.0.0.0;sock=-1");
			target.add(targetName.c_str());
			
			fd = target.get<int>("sock");
			if (fd < 0)
			{
				// create socket
				fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
				if (fd < 0)
					throw DashelException(DashelException::ConnectionFailed, errno, "Cannot create socket.");
				
				IPV4Address bindAddress(target.get("address"), target.get<int>("port"));
				
				// bind
				sockaddr_in addr;
				addr.sin_family = AF_INET;
				addr.sin_port = htons(bindAddress.port);
				addr.sin_addr.s_addr = htonl(bindAddress.address);
				if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) != 0)
					throw DashelException(DashelException::ConnectionFailed, errno, "Cannot bind socket to port, probably the port is already in use.");
			}
			else
			{
				// remove file descriptor information from target name
				target.erase("sock");
			}
			
			// enable broadcast
			int broadcastPermission = 1;
			setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &broadcastPermission, sizeof(broadcastPermission));
		}