From 11d68b2b5a80fc3b2fe03038e92a322a084c5557 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Thu, 3 Feb 2005 22:24:12 +0000 Subject: [PATCH] Actually include rdpsrv.cpp as well :-) --- rdpsrv.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 rdpsrv.cpp diff --git a/rdpsrv.cpp b/rdpsrv.cpp new file mode 100644 index 0000000..ea4892f --- /dev/null +++ b/rdpsrv.cpp @@ -0,0 +1,65 @@ +#include +#include +#include +#include +#include +#include +#include + +static const int RDP_PORT = 3389; +int create_server_socket(); + +int main() +{ + int server_sock = create_server_socket(); + for ( ;; ) { + sockaddr_in sin; + socklen_t len; + int sock = accept(server_sock, (sockaddr *)&sin, &len); + + if (sock == -1) { + perror("accept()"); + exit(1); + } + + printf("Got socket.\n"); + + close(sock); + } +} + +int create_server_socket() +{ + int server_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + const unsigned int one = 1, zero = 0; + struct sockaddr_in addr; + int err; + + setsockopt(server_sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)); + ioctl(server_sock, FIONBIO, &zero); + + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = INADDR_ANY; + addr.sin_port = htons(RDP_PORT); + + do { + err = bind(server_sock, (struct sockaddr *)&addr, sizeof(struct sockaddr)); + + if (err == -1) { + perror("bind()"); + + /* try to recover from recoverable errors... */ + if (errno == ENOMEM || errno == EADDRINUSE) { + puts("Waiting 1 sec before trying again..."); + sleep(1); + } else { + puts("Giving up."); + exit(1); + } + } + } while (err == -1); + + listen(server_sock, 20); + return server_sock; +} + -- 2.39.2