]> git.sesse.net Git - rdpsrv/blob - rdpsrv.c
Set CC and CFLAGS.
[rdpsrv] / rdpsrv.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <errno.h>
5 #include <sys/socket.h>
6 #include <sys/ioctl.h>
7 #include <arpa/inet.h>
8
9 const int tcp_port_rdp = 3389;
10 int create_server_socket();
11 int serve_client(int sock);
12
13 int main()
14 {
15         int server_sock = create_server_socket();
16         for ( ;; ) {
17                 struct sockaddr_in sin;
18                 socklen_t len;
19                 int sock = accept(server_sock, (struct sockaddr *)&sin, &len);
20         
21                 if (sock == -1) {
22                         perror("accept()");
23                         exit(1);
24                 }
25
26                 serve_client(sock);
27
28                 close(sock);
29         }
30 }
31
32 int create_server_socket()
33 {
34         int server_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
35         const unsigned int one = 1, zero = 0;
36         struct sockaddr_in addr;
37         int err;
38
39         setsockopt(server_sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
40         ioctl(server_sock, FIONBIO, &zero);
41
42         addr.sin_family = AF_INET;
43         addr.sin_addr.s_addr = INADDR_ANY;
44         addr.sin_port = htons(tcp_port_rdp);
45
46         do {
47                 err = bind(server_sock, (struct sockaddr *)&addr, sizeof(struct sockaddr));
48
49                 if (err == -1) {
50                         perror("bind()");
51
52                         /* try to recover from recoverable errors... */
53                         if (errno == ENOMEM || errno == EADDRINUSE) {
54                                 puts("Waiting 1 sec before trying again...");
55                                 sleep(1);
56                         } else {
57                                 puts("Giving up.");
58                                 exit(1);
59                         }
60                 }
61         } while (err == -1);
62
63         listen(server_sock, 20);
64         return server_sock;
65 }
66
67
68 int serve_client(int sock)
69 {
70         for ( ;; ) {
71                 unsigned char buf[4096];
72                 
73                 /* receive ISO packets */
74                 
75         }
76 }