//! 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."); }
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; }
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); }
/* -- 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"); } }
/* -- 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); }
/* -- 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); }
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(); }
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; }
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; }
//! 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)); }