parent
							
								
									89a1b75bd2
								
							
						
					
					
						commit
						b5fae8b6e9
					
				
				 4 changed files with 109 additions and 0 deletions
			
			
		| @ -0,0 +1,10 @@ | ||||
| docs/ | ||||
| **.log | ||||
| bin/ | ||||
| bin-int/ | ||||
| .vscode/ | ||||
| .vs/ | ||||
| **.sln | ||||
| **Makefile | ||||
| **.make | ||||
| **.vcxproj* | ||||
| @ -0,0 +1,9 @@ | ||||
| # Unix socket test | ||||
| ## Prerequisite | ||||
| Use a linux distro | ||||
| ## Build and Run | ||||
| ``` | ||||
| premake5 gmake | ||||
| make | ||||
| ./bin/path_to_executable/sandbox | ||||
| ``` | ||||
| @ -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" | ||||
|     } | ||||
| @ -0,0 +1,63 @@ | ||||
| #include <iostream> | ||||
| #include <string> | ||||
| 
 | ||||
| //C socket includes
 | ||||
| #include <netinet/in.h> | ||||
| #include <stdlib.h> | ||||
| #include <sys/socket.h> | ||||
| #include <unistd.h> | ||||
| 
 | ||||
| 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" | ||||
|     				  "<p>Hello World!</p>"; | ||||
|     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; | ||||
| } | ||||
					Loading…
					
					
				
		Reference in New Issue