Esempio n. 1
0
/**
**  Open a TCP socket
**
**  @param port  Bind socket to a specific port number
**
**  @return If success the socket fildes, -1 otherwise
*/
Socket NetOpenTCP(const char *addr, int port)
{
	Socket sockfd = socket(AF_INET, SOCK_STREAM, 0);

	if (sockfd == INVALID_SOCKET) {
		return static_cast<Socket>(-1);
	}
	// bind local port
	if (port) {
		struct sockaddr_in sock_addr;

		memset(&sock_addr, 0, sizeof(sock_addr));
		sock_addr.sin_family = AF_INET;
		if (addr) {
			sock_addr.sin_addr.s_addr = inet_addr(addr);
		} else {
			sock_addr.sin_addr.s_addr = INADDR_ANY;
		}
		sock_addr.sin_port = htons(port);

		int opt = 1;
		setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (setsockopttype)&opt, sizeof(opt));

		if (bind(sockfd, (struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0) {
			fprintf(stderr, "Couldn't bind to local port\n");
			NetCloseTCP(sockfd);
			return static_cast<Socket>(-1);
		}
	}
	return sockfd;
}
Esempio n. 2
0
/**
**  Open a TCP socket
**
**  @param port  Bind socket to a specific port number
**
**  @return If success the socket fildes, -1 otherwise
*/
Socket NetOpenTCP(int port)
{
	Socket sockfd;

	sockfd = socket(AF_INET, SOCK_STREAM, 0);
	if (sockfd == INVALID_SOCKET) {
		return (Socket)-1;
	}
	// bind local port
	if (port) {
		struct sockaddr_in sock_addr;
		int opt;

		memset(&sock_addr, 0, sizeof(sock_addr));
		sock_addr.sin_family = AF_INET;
		sock_addr.sin_addr.s_addr = INADDR_ANY;
		sock_addr.sin_port = htons(port);

		opt = 1;
		setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (setsockopttype)&opt, sizeof(opt));

		if (bind(sockfd,(struct sockaddr *)&sock_addr, sizeof(sock_addr)) < 0) {
			fprintf(stderr, "Couldn't bind to local port\n");
			NetCloseTCP(sockfd);
			return (Socket)-1;
		}
		NetLastHost = sock_addr.sin_addr.s_addr;
		NetLastPort = sock_addr.sin_port;
	}
	NetLastSocket = sockfd;
	return sockfd;
}
Esempio n. 3
0
void CheckForConnection() {
    Socket newSocket = NetAcceptTCP(listeningSocket);

    if (newSocket != INVALID_SOCKET) {
        if (connected) {
            SendResponseMessage("New connection made.  Goodbye.\n", 3);
            NetCloseTCP(interfaceSocket);
        }
        interfaceSocket = newSocket;

        DebugPrint("Established socket interface connection to %d.%d.%d.%d port %d\n" _C_ NIPQUAD(ntohl(NetLastHost)) _C_ NetLastPort);
        NetSetNonBlocking(interfaceSocket);
        connected = true;
    }
}
Esempio n. 4
0
void CheckForCommands() {
    int result = strlen(recv_buffer);

    if (result == 0) // No pending commands
    { // Keep going till the commands have been received completely (the last character is an endline; recv_buffer better be big enough for at least one entire command)
        do {
            memset(temp_buffer, 0, RECV_BUFFER_SIZE);
            result = NetRecvTCP(interfaceSocket, temp_buffer, RECV_BUFFER_SIZE - strlen(recv_buffer) - 1);
            if (result > 0)
                strcat(recv_buffer, temp_buffer);
        } while (result > 0 && (strlen(recv_buffer) > 0 && strlen(recv_buffer) < RECV_BUFFER_SIZE - 1 && recv_buffer[strlen(recv_buffer) - 1] != '\n'));
    }

    if (result > 0)
        HandleRequest();
    else if (NetCheckForDisconnect()) {
        DebugPrint("Broken connection.");
        connected = false;
        NetCloseTCP(interfaceSocket);
    }
}
Esempio n. 5
0
 void Close() {
     NetCloseTCP(socket);
     socket = Socket(-1);
 }
Esempio n. 6
0
void SocketInterfaceExit() {
    if (connected)
        NetCloseTCP(interfaceSocket);
    NetCloseTCP(listeningSocket);
}
Esempio n. 7
0
void HandleQuit() {
    SendResponseMessage("BYE\n", 3);
    connected = false;
    NetCloseTCP(interfaceSocket);
}
Esempio n. 8
0
/**
**  Close Connection to Master Server
**
**  @return  nothing
*/
int MetaClose()
{
	NetCloseTCP(MetaServerFildes);
	return 0;
}