diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9c60ff8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +docs/ +**.log +bin/ +bin-int/ +.vscode/ +.vs/ +**.sln +**Makefile +**.make +**.vcxproj* \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..d44b95c --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# Unix socket test +## Prerequisite +Use a linux distro +## Build and Run +``` +premake5 gmake +make +./bin/path_to_executable/sandbox +``` \ No newline at end of file diff --git a/premake5.lua b/premake5.lua new file mode 100644 index 0000000..2de168a --- /dev/null +++ b/premake5.lua @@ -0,0 +1,27 @@ +workspace "socket_test" + architecture "x64" + configurations { "Debug", "Release" } + startproject "sandbox" + flags + { + "MultiProcessorCompile" + } + +outputdir = "%{cfg.system}-%{cfg.architecture}-%{cfg.buildcfg}" + +IncludeDirs = {} + +project "sandbox" + kind "ConsoleApp" + language "C++" + cppdialect "C++17" + systemversion "latest" + + targetdir("%{wks.location}/bin/" .. outputdir .. "/%{prj.name}") + objdir("%{wks.location}/bin-int/" .. outputdir .. "/%{prj.name}") + + files + { + "src/**.h", + "src/**.cpp" + } \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..06f2706 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,63 @@ +#include +#include + +//C socket includes +#include +#include +#include +#include + +int main() +{ + int server_fd; + ssize_t valread; + struct sockaddr_in address; + socklen_t addrlen = sizeof(address); + + //Socket creation step + if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) + { + perror("socket failed"); + exit(EXIT_FAILURE); + } + + address.sin_family = AF_INET; + address.sin_addr.s_addr = INADDR_ANY; + address.sin_port = htons(80); + + //Binding step + if (bind(server_fd, (struct sockaddr*)&address, + sizeof(address)) + < 0) + { + perror("bind failed"); + exit(EXIT_FAILURE); + } + + //Listening step + if (listen(server_fd, 3) < 0) + { + perror("listen"); + exit(EXIT_FAILURE); + } + + std::string msg = "HTTP/1.1 200 OK\r\n" + "Content-Type: text/html\r\n\r\n" + "

Hello World!

"; + while (true) + { + int socket; + //Accepting connections step + if ((socket + = accept(server_fd, (struct sockaddr*)&address, + &addrlen)) + > 0) + { + //Sending data step + send(socket, msg.c_str(), msg.length(), 0); + close(socket); + } + } + close(server_fd); + return 0; +} \ No newline at end of file