124 lines
2.8 KiB
C++
124 lines
2.8 KiB
C++
|
||
/*
|
||
luke version
|
||
*/
|
||
|
||
#include <iostream>
|
||
#include <exception>
|
||
#include <stdexcept>
|
||
#include "Webserv.hpp"
|
||
|
||
int main(void)
|
||
{
|
||
try
|
||
{
|
||
Webserv serv;
|
||
|
||
// https://security.stackexchange.com/questions/169213/how-to-chose-a-port-to-run-an-application-on-localhost
|
||
serv.bind(8080);
|
||
serv.listen(512); // 512 max connections arbitrary
|
||
serv.start();
|
||
}
|
||
catch (std::exception& e)
|
||
{
|
||
std::cout << e.what() << '\n';
|
||
}
|
||
return (0);
|
||
}
|
||
|
||
|
||
/*
|
||
wip hugo version
|
||
# include <map>
|
||
# include <exception>
|
||
# include <stdexcept>
|
||
# include <unistd.h> // close
|
||
# include <fcntl.h> // fcntl
|
||
|
||
# include <iostream> // cout, cin
|
||
# include <cerrno> // errno
|
||
# include <cstdio> // perror
|
||
# include <string.h> // memset
|
||
# include <sys/socket.h> // socket, accept, listen, send, recv, bind, connect, setsockopt, getsockname
|
||
# include <netinet/in.h> // sockaddr_in
|
||
# include <arpa/inet.h> // inet_ntoa, inet_addr, htonl, htons, ntohl, ntohs
|
||
# include <poll.h> // poll
|
||
|
||
# define INVALID -1
|
||
# define PORT 1025
|
||
# define BACKLOG 20
|
||
|
||
int main()
|
||
{
|
||
struct sockaddr_in my_addr;
|
||
struct sockaddr_in their_addr;
|
||
int sckt_fd;
|
||
int axpt_fd;
|
||
int lstn;
|
||
socklen_t addr_len;
|
||
|
||
// INIT SOCKET
|
||
sckt_fd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0);
|
||
if (sckt_fd == INVALID)
|
||
{
|
||
perror("err socket(): ");
|
||
return 0;
|
||
}
|
||
std::cout << "server init\n";
|
||
|
||
// BIND IT
|
||
memset(&my_addr, 0, sizeof(my_addr));
|
||
my_addr.sin_family = AF_INET;
|
||
my_addr.sin_port = htons(PORT);
|
||
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||
// my_addr.sin_addr.s_addr = inet_addr("10.12.110.57");
|
||
bind(sckt_fd, (struct sockaddr *)&my_addr, sizeof(my_addr));
|
||
if (sckt_fd == INVALID)
|
||
{
|
||
perror("err bind(): ");
|
||
return 0;
|
||
}
|
||
std::cout << "socket bind to port: " << PORT << "\n";
|
||
// https://beej.us/guide/bgnet/html/index-wide.html#cb29 :
|
||
//
|
||
// Sometimes, you might notice, you try to rerun a server and bind() fails, claiming “Address already in use.” What does that mean? Well, a little bit of a socket that was connected is still hanging around in the kernel, and it’s hogging the port. You can either wait for it to clear (a minute or so), or add code to your program allowing it to reuse the port, like this:
|
||
//
|
||
// int yes=1;
|
||
//
|
||
// // lose the pesky "Address already in use" error message
|
||
// if (setsockopt(listener,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof yes) == -1) {
|
||
// perror("setsockopt");
|
||
// exit(1);
|
||
// }
|
||
|
||
// LISTEN ON IT
|
||
lstn = listen(sckt_fd, BACKLOG);
|
||
if (lstn == INVALID)
|
||
{
|
||
perror("err listen(): ");
|
||
return 0;
|
||
}
|
||
std::cout << "server listening\n";
|
||
|
||
// ACCEPT INCOMING CONNECT
|
||
while (1)
|
||
{
|
||
|
||
addr_len = sizeof(their_addr);
|
||
axpt_fd = accept(sckt_fd, (sockaddr*)&their_addr, &addr_len);
|
||
if (axpt_fd == INVALID)
|
||
{
|
||
perror("err accept(): ");
|
||
continue;
|
||
}
|
||
std::cout << "server accepted a socket from: "
|
||
<< inet_ntoa(their_addr.sin_addr)
|
||
<< "\n";
|
||
break;
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
*/
|
||
|