Commit 62357e69 authored by captainwong's avatar captainwong

update direct-machine; linux build support for bench, demo and server_demo

parent 1f847118
...@@ -33,6 +33,7 @@ Debug/config/ ...@@ -33,6 +33,7 @@ Debug/config/
Debug/ Debug/
Release/ Release/
ReleaseD/ ReleaseD/
build/
# vc6 # vc6
......
...@@ -4,6 +4,11 @@ ...@@ -4,6 +4,11 @@
欢迎提 issue 及 pr 。 欢迎提 issue 及 pr 。
## 编译示例
* `Windows` 下使用 `VS 2019 Community` 打开 `ademco_hb.sln` 进行编译。
* `Linux` 下执行 `build.sh` 编译 `demo`, `bench`, `server_demo` 三个示例程序,结果放在 `build` 文件夹内。
## docs ## docs
文档 文档
......
...@@ -21,71 +21,103 @@ EndProject ...@@ -21,71 +21,103 @@ EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
Debug|ARM = Debug|ARM
Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64 Debug|x64 = Debug|x64
Debug|x86 = Debug|x86 Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU Release|Any CPU = Release|Any CPU
Release|ARM = Release|ARM
Release|ARM64 = Release|ARM64
Release|x64 = Release|x64 Release|x64 = Release|x64
Release|x86 = Release|x86 Release|x86 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{36640D95-55AB-4DCF-9062-91A53203E6A9}.Debug|Any CPU.ActiveCfg = Debug|Win32 {36640D95-55AB-4DCF-9062-91A53203E6A9}.Debug|Any CPU.ActiveCfg = Debug|Win32
{36640D95-55AB-4DCF-9062-91A53203E6A9}.Debug|ARM.ActiveCfg = Debug|Win32
{36640D95-55AB-4DCF-9062-91A53203E6A9}.Debug|ARM64.ActiveCfg = Debug|Win32
{36640D95-55AB-4DCF-9062-91A53203E6A9}.Debug|x64.ActiveCfg = Debug|x64 {36640D95-55AB-4DCF-9062-91A53203E6A9}.Debug|x64.ActiveCfg = Debug|x64
{36640D95-55AB-4DCF-9062-91A53203E6A9}.Debug|x64.Build.0 = Debug|x64 {36640D95-55AB-4DCF-9062-91A53203E6A9}.Debug|x64.Build.0 = Debug|x64
{36640D95-55AB-4DCF-9062-91A53203E6A9}.Debug|x86.ActiveCfg = Debug|Win32 {36640D95-55AB-4DCF-9062-91A53203E6A9}.Debug|x86.ActiveCfg = Debug|Win32
{36640D95-55AB-4DCF-9062-91A53203E6A9}.Debug|x86.Build.0 = Debug|Win32 {36640D95-55AB-4DCF-9062-91A53203E6A9}.Debug|x86.Build.0 = Debug|Win32
{36640D95-55AB-4DCF-9062-91A53203E6A9}.Release|Any CPU.ActiveCfg = Release|Win32 {36640D95-55AB-4DCF-9062-91A53203E6A9}.Release|Any CPU.ActiveCfg = Release|Win32
{36640D95-55AB-4DCF-9062-91A53203E6A9}.Release|ARM.ActiveCfg = Release|Win32
{36640D95-55AB-4DCF-9062-91A53203E6A9}.Release|ARM64.ActiveCfg = Release|Win32
{36640D95-55AB-4DCF-9062-91A53203E6A9}.Release|x64.ActiveCfg = Release|x64 {36640D95-55AB-4DCF-9062-91A53203E6A9}.Release|x64.ActiveCfg = Release|x64
{36640D95-55AB-4DCF-9062-91A53203E6A9}.Release|x64.Build.0 = Release|x64 {36640D95-55AB-4DCF-9062-91A53203E6A9}.Release|x64.Build.0 = Release|x64
{36640D95-55AB-4DCF-9062-91A53203E6A9}.Release|x86.ActiveCfg = Release|Win32 {36640D95-55AB-4DCF-9062-91A53203E6A9}.Release|x86.ActiveCfg = Release|Win32
{36640D95-55AB-4DCF-9062-91A53203E6A9}.Release|x86.Build.0 = Release|Win32 {36640D95-55AB-4DCF-9062-91A53203E6A9}.Release|x86.Build.0 = Release|Win32
{EA5A04AA-EE49-4059-81A0-765402A210E7}.Debug|Any CPU.ActiveCfg = Debug|Win32 {EA5A04AA-EE49-4059-81A0-765402A210E7}.Debug|Any CPU.ActiveCfg = Debug|Win32
{EA5A04AA-EE49-4059-81A0-765402A210E7}.Debug|ARM.ActiveCfg = Debug|Win32
{EA5A04AA-EE49-4059-81A0-765402A210E7}.Debug|ARM64.ActiveCfg = Debug|Win32
{EA5A04AA-EE49-4059-81A0-765402A210E7}.Debug|x64.ActiveCfg = Debug|x64 {EA5A04AA-EE49-4059-81A0-765402A210E7}.Debug|x64.ActiveCfg = Debug|x64
{EA5A04AA-EE49-4059-81A0-765402A210E7}.Debug|x64.Build.0 = Debug|x64 {EA5A04AA-EE49-4059-81A0-765402A210E7}.Debug|x64.Build.0 = Debug|x64
{EA5A04AA-EE49-4059-81A0-765402A210E7}.Debug|x86.ActiveCfg = Debug|Win32 {EA5A04AA-EE49-4059-81A0-765402A210E7}.Debug|x86.ActiveCfg = Debug|Win32
{EA5A04AA-EE49-4059-81A0-765402A210E7}.Debug|x86.Build.0 = Debug|Win32 {EA5A04AA-EE49-4059-81A0-765402A210E7}.Debug|x86.Build.0 = Debug|Win32
{EA5A04AA-EE49-4059-81A0-765402A210E7}.Release|Any CPU.ActiveCfg = Release|Win32 {EA5A04AA-EE49-4059-81A0-765402A210E7}.Release|Any CPU.ActiveCfg = Release|Win32
{EA5A04AA-EE49-4059-81A0-765402A210E7}.Release|ARM.ActiveCfg = Release|Win32
{EA5A04AA-EE49-4059-81A0-765402A210E7}.Release|ARM64.ActiveCfg = Release|Win32
{EA5A04AA-EE49-4059-81A0-765402A210E7}.Release|x64.ActiveCfg = Release|x64 {EA5A04AA-EE49-4059-81A0-765402A210E7}.Release|x64.ActiveCfg = Release|x64
{EA5A04AA-EE49-4059-81A0-765402A210E7}.Release|x64.Build.0 = Release|x64 {EA5A04AA-EE49-4059-81A0-765402A210E7}.Release|x64.Build.0 = Release|x64
{EA5A04AA-EE49-4059-81A0-765402A210E7}.Release|x86.ActiveCfg = Release|Win32 {EA5A04AA-EE49-4059-81A0-765402A210E7}.Release|x86.ActiveCfg = Release|Win32
{EA5A04AA-EE49-4059-81A0-765402A210E7}.Release|x86.Build.0 = Release|Win32 {EA5A04AA-EE49-4059-81A0-765402A210E7}.Release|x86.Build.0 = Release|Win32
{EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Debug|Any CPU.ActiveCfg = Debug|Win32 {EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Debug|Any CPU.ActiveCfg = Debug|Win32
{EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Debug|ARM.ActiveCfg = Debug|Win32
{EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Debug|ARM64.ActiveCfg = Debug|Win32
{EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Debug|x64.ActiveCfg = Debug|x64 {EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Debug|x64.ActiveCfg = Debug|x64
{EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Debug|x64.Build.0 = Debug|x64 {EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Debug|x64.Build.0 = Debug|x64
{EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Debug|x86.ActiveCfg = Debug|Win32 {EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Debug|x86.ActiveCfg = Debug|Win32
{EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Debug|x86.Build.0 = Debug|Win32 {EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Debug|x86.Build.0 = Debug|Win32
{EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Release|Any CPU.ActiveCfg = Release|Win32 {EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Release|Any CPU.ActiveCfg = Release|Win32
{EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Release|ARM.ActiveCfg = Release|Win32
{EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Release|ARM64.ActiveCfg = Release|Win32
{EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Release|x64.ActiveCfg = Release|x64 {EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Release|x64.ActiveCfg = Release|x64
{EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Release|x64.Build.0 = Release|x64 {EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Release|x64.Build.0 = Release|x64
{EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Release|x86.ActiveCfg = Release|Win32 {EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Release|x86.ActiveCfg = Release|Win32
{EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Release|x86.Build.0 = Release|Win32 {EF267749-DA49-433D-BF4E-742D4BC7F1DA}.Release|x86.Build.0 = Release|Win32
{76899E2F-3026-4262-8D0A-EE7CED1020CF}.Debug|Any CPU.ActiveCfg = Debug|Win32 {76899E2F-3026-4262-8D0A-EE7CED1020CF}.Debug|Any CPU.ActiveCfg = Debug|Win32
{76899E2F-3026-4262-8D0A-EE7CED1020CF}.Debug|ARM.ActiveCfg = Debug|Win32
{76899E2F-3026-4262-8D0A-EE7CED1020CF}.Debug|ARM64.ActiveCfg = Debug|Win32
{76899E2F-3026-4262-8D0A-EE7CED1020CF}.Debug|x64.ActiveCfg = Debug|x64 {76899E2F-3026-4262-8D0A-EE7CED1020CF}.Debug|x64.ActiveCfg = Debug|x64
{76899E2F-3026-4262-8D0A-EE7CED1020CF}.Debug|x64.Build.0 = Debug|x64 {76899E2F-3026-4262-8D0A-EE7CED1020CF}.Debug|x64.Build.0 = Debug|x64
{76899E2F-3026-4262-8D0A-EE7CED1020CF}.Debug|x86.ActiveCfg = Debug|Win32 {76899E2F-3026-4262-8D0A-EE7CED1020CF}.Debug|x86.ActiveCfg = Debug|Win32
{76899E2F-3026-4262-8D0A-EE7CED1020CF}.Debug|x86.Build.0 = Debug|Win32 {76899E2F-3026-4262-8D0A-EE7CED1020CF}.Debug|x86.Build.0 = Debug|Win32
{76899E2F-3026-4262-8D0A-EE7CED1020CF}.Release|Any CPU.ActiveCfg = Release|Win32 {76899E2F-3026-4262-8D0A-EE7CED1020CF}.Release|Any CPU.ActiveCfg = Release|Win32
{76899E2F-3026-4262-8D0A-EE7CED1020CF}.Release|ARM.ActiveCfg = Release|Win32
{76899E2F-3026-4262-8D0A-EE7CED1020CF}.Release|ARM64.ActiveCfg = Release|Win32
{76899E2F-3026-4262-8D0A-EE7CED1020CF}.Release|x64.ActiveCfg = Release|x64 {76899E2F-3026-4262-8D0A-EE7CED1020CF}.Release|x64.ActiveCfg = Release|x64
{76899E2F-3026-4262-8D0A-EE7CED1020CF}.Release|x64.Build.0 = Release|x64 {76899E2F-3026-4262-8D0A-EE7CED1020CF}.Release|x64.Build.0 = Release|x64
{76899E2F-3026-4262-8D0A-EE7CED1020CF}.Release|x86.ActiveCfg = Release|Win32 {76899E2F-3026-4262-8D0A-EE7CED1020CF}.Release|x86.ActiveCfg = Release|Win32
{76899E2F-3026-4262-8D0A-EE7CED1020CF}.Release|x86.Build.0 = Release|Win32 {76899E2F-3026-4262-8D0A-EE7CED1020CF}.Release|x86.Build.0 = Release|Win32
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|Any CPU.Build.0 = Debug|Any CPU {3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|ARM.ActiveCfg = Debug|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|ARM.Build.0 = Debug|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|ARM64.Build.0 = Debug|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|x64.ActiveCfg = Debug|Any CPU {3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|x64.ActiveCfg = Debug|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|x64.Build.0 = Debug|Any CPU {3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|x64.Build.0 = Debug|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|x86.ActiveCfg = Debug|Any CPU {3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|x86.ActiveCfg = Debug|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|x86.Build.0 = Debug|Any CPU {3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Debug|x86.Build.0 = Debug|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|Any CPU.ActiveCfg = Release|Any CPU {3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|Any CPU.Build.0 = Release|Any CPU {3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|Any CPU.Build.0 = Release|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|ARM.ActiveCfg = Release|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|ARM.Build.0 = Release|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|ARM64.ActiveCfg = Release|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|ARM64.Build.0 = Release|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|x64.ActiveCfg = Release|Any CPU {3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|x64.ActiveCfg = Release|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|x64.Build.0 = Release|Any CPU {3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|x64.Build.0 = Release|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|x86.ActiveCfg = Release|Any CPU {3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|x86.ActiveCfg = Release|Any CPU
{3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|x86.Build.0 = Release|Any CPU {3381C5DE-57BF-425F-A3A6-B85DECF776D6}.Release|x86.Build.0 = Release|Any CPU
{01B919A1-174A-45E5-A2B5-B509BD66E91A}.Debug|Any CPU.ActiveCfg = Debug|Win32 {01B919A1-174A-45E5-A2B5-B509BD66E91A}.Debug|Any CPU.ActiveCfg = Debug|Win32
{01B919A1-174A-45E5-A2B5-B509BD66E91A}.Debug|ARM.ActiveCfg = Debug|Win32
{01B919A1-174A-45E5-A2B5-B509BD66E91A}.Debug|ARM64.ActiveCfg = Debug|Win32
{01B919A1-174A-45E5-A2B5-B509BD66E91A}.Debug|x64.ActiveCfg = Debug|x64 {01B919A1-174A-45E5-A2B5-B509BD66E91A}.Debug|x64.ActiveCfg = Debug|x64
{01B919A1-174A-45E5-A2B5-B509BD66E91A}.Debug|x64.Build.0 = Debug|x64 {01B919A1-174A-45E5-A2B5-B509BD66E91A}.Debug|x64.Build.0 = Debug|x64
{01B919A1-174A-45E5-A2B5-B509BD66E91A}.Debug|x86.ActiveCfg = Debug|Win32 {01B919A1-174A-45E5-A2B5-B509BD66E91A}.Debug|x86.ActiveCfg = Debug|Win32
{01B919A1-174A-45E5-A2B5-B509BD66E91A}.Debug|x86.Build.0 = Debug|Win32 {01B919A1-174A-45E5-A2B5-B509BD66E91A}.Debug|x86.Build.0 = Debug|Win32
{01B919A1-174A-45E5-A2B5-B509BD66E91A}.Release|Any CPU.ActiveCfg = Release|Win32 {01B919A1-174A-45E5-A2B5-B509BD66E91A}.Release|Any CPU.ActiveCfg = Release|Win32
{01B919A1-174A-45E5-A2B5-B509BD66E91A}.Release|ARM.ActiveCfg = Release|Win32
{01B919A1-174A-45E5-A2B5-B509BD66E91A}.Release|ARM64.ActiveCfg = Release|Win32
{01B919A1-174A-45E5-A2B5-B509BD66E91A}.Release|x64.ActiveCfg = Release|x64 {01B919A1-174A-45E5-A2B5-B509BD66E91A}.Release|x64.ActiveCfg = Release|x64
{01B919A1-174A-45E5-A2B5-B509BD66E91A}.Release|x64.Build.0 = Release|x64 {01B919A1-174A-45E5-A2B5-B509BD66E91A}.Release|x64.Build.0 = Release|x64
{01B919A1-174A-45E5-A2B5-B509BD66E91A}.Release|x86.ActiveCfg = Release|Win32 {01B919A1-174A-45E5-A2B5-B509BD66E91A}.Release|x86.ActiveCfg = Release|Win32
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#include "../include/ademco_packet.h" #include "../include/ademco_packet.h"
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <chrono> #include <chrono>
#include <thread> #include <thread>
...@@ -48,7 +49,7 @@ void ademcoPacketBench() ...@@ -48,7 +49,7 @@ void ademcoPacketBench()
int packets = 0; int packets = 0;
while (res == ParseResult::RESULT_OK) { while (res == ParseResult::RESULT_OK) {
packets++; packets++;
if (packets % 1000 == 0) { if (packets % 500 == 0) {
printf("\r%d/%d %s", packets, TIMES, ap.timestamp_.data_); printf("\r%d/%d %s", packets, TIMES, ap.timestamp_.data_);
} }
pos += cb; pos += cb;
...@@ -75,6 +76,4 @@ void ademcoPacketBench() ...@@ -75,6 +76,4 @@ void ademcoPacketBench()
int main() int main()
{ {
ademcoPacketBench(); ademcoPacketBench();
system("pause");
} }
#!/bin/bash
mkdir -p build
cd build
g++ -std=c++17 ../bench/bench.cpp -I../include -o bench
g++ -std=c++17 ../demo/demo.cpp -I../include -o demo
g++ -std=c++17 ../server_demo/server_demo.cpp -I../include -lpthread -o server_demo
#ifndef _CRT_SECURE_NO_WARNINGS #ifdef _WIN32
#define _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
#define ioctl ioctlsocket
#define socklen_t int
#define close closesocket
#else // linux
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define SOCKET int
#define INVALID_SOCKET -1
#endif #endif
#define DISABLE_JLIB_LOG2 #define DISABLE_JLIB_LOG2
#include <ademco_packet.h> #include <ademco_packet.h>
#include <ademco_detail.h> #include <ademco_detail.h>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
#include <thread> #include <thread>
#include <vector> #include <vector>
#include <mutex> #include <mutex>
#include <string.h>
using namespace ademco; using namespace ademco;
...@@ -22,8 +37,8 @@ constexpr size_t BUFF_SIZE = 4096; ...@@ -22,8 +37,8 @@ constexpr size_t BUFF_SIZE = 4096;
struct Buffer struct Buffer
{ {
unsigned int rpos; size_t rpos;
unsigned int wpos; size_t wpos;
char buff[BUFF_SIZE]; char buff[BUFF_SIZE];
Buffer() { clear(); } Buffer() { clear(); }
...@@ -42,12 +57,14 @@ int main(int argc, char** argv) ...@@ -42,12 +57,14 @@ int main(int argc, char** argv)
{ {
usage(argv[0]); usage(argv[0]);
#ifdef _WIN32
WSADATA wsaData; WSADATA wsaData;
int err = WSAStartup(MAKEWORD(1, 1), &wsaData); int err = WSAStartup(MAKEWORD(1, 1), &wsaData);
if (err != 0) { if (err != 0) {
printf("init wsa failed %d\n", err); printf("init wsa failed %d\n", err);
abort(); abort();
} }
#endif
int port = 12345; int port = 12345;
...@@ -59,31 +76,46 @@ int main(int argc, char** argv) ...@@ -59,31 +76,46 @@ int main(int argc, char** argv)
memset(&sAddrIn, 0, sizeof(sAddrIn)); memset(&sAddrIn, 0, sizeof(sAddrIn));
sAddrIn.sin_family = AF_INET; sAddrIn.sin_family = AF_INET;
sAddrIn.sin_port = htons(static_cast<u_short>(port)); sAddrIn.sin_port = htons(static_cast<u_short>(port));
sAddrIn.sin_addr.S_un.S_addr = ADDR_ANY; sAddrIn.sin_addr.s_addr = INADDR_ANY;
auto serverSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); auto serverSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
u_long lngMode = 1; u_long lngMode = 1;
ioctlsocket(serverSock, FIONBIO, (u_long FAR*) & lngMode); int ret = ioctl(serverSock, FIONBIO, (u_long*) & lngMode);
bind(serverSock, (struct sockaddr*) & sAddrIn, sizeof(sAddrIn)); if (ret != 0) {
listen(serverSock, SOMAXCONN); fprintf(stderr, "ioctl failed %d\n", ret);
return ret;
}
ret = bind(serverSock, (struct sockaddr*) & sAddrIn, sizeof(sAddrIn));
if (ret != 0) {
fprintf(stderr, "bind failed %d\n", ret);
return ret;
}
ret = listen(serverSock, SOMAXCONN);
if (ret != 0) {
fprintf(stderr, "listen failed %d\n", ret);
return ret;
}
printf("Listening on %s:%d\n", inet_ntoa(sAddrIn.sin_addr), ntohs(sAddrIn.sin_port));
auto do_accept = [&serverSock]() { auto do_accept = [&serverSock]() {
if (clientSock != INVALID_SOCKET) { return; } if (clientSock != INVALID_SOCKET) { return; }
struct sockaddr_in sForeignAddIn; struct sockaddr_in sForeignAddrIn;
int nLength = sizeof(struct sockaddr_in); socklen_t nLength = sizeof(struct sockaddr_in);
fd_set rfd; fd_set rfd;
FD_ZERO(&rfd); FD_ZERO(&rfd);
FD_SET(serverSock, &rfd); FD_SET(serverSock, &rfd);
timeval timeout = { 1, 0 }; timeval timeout = { 1, 0 };
int nfds = select(1, &rfd, (fd_set*)0, (fd_set*)0, &timeout); int nfds = select(serverSock + 1, &rfd, (fd_set*)0, (fd_set*)0, &timeout);
printf("do_accept, select ret=%d\n", nfds);
if (nfds > 0) { if (nfds > 0) {
FD_CLR(serverSock, &rfd); FD_CLR(serverSock, &rfd);
clientSock = accept(serverSock, (struct sockaddr*) & sForeignAddIn, &nLength); clientSock = accept(serverSock, (struct sockaddr*) & sForeignAddrIn, &nLength);
printf("Got connection from %s:%d, fd=%lld\n", inet_ntoa(sForeignAddrIn.sin_addr), sForeignAddrIn.sin_port, clientSock);
} }
}; };
auto do_handle = []() -> ademco::ParseResult { auto do_handle = []() -> ademco::ParseResult {
...@@ -159,22 +191,22 @@ int main(int argc, char** argv) ...@@ -159,22 +191,22 @@ int main(int argc, char** argv)
FD_ZERO(&fd_read); FD_ZERO(&fd_read);
FD_SET(clientSock, &fd_read); FD_SET(clientSock, &fd_read);
BOOL bRead = FD_ISSET(clientSock, &fd_read); int bRead = FD_ISSET(clientSock, &fd_read);
if (!bRead) { return; } if (!bRead) { return; }
char* temp = clientBuffer.buff + clientBuffer.wpos; char* temp = clientBuffer.buff + clientBuffer.wpos;
DWORD dwLenToRead = BUFF_SIZE - clientBuffer.wpos; size_t dwLenToRead = BUFF_SIZE - clientBuffer.wpos;
int bytes_transfered = recv(clientSock, temp, dwLenToRead, 0); int bytes_transfered = recv(clientSock, temp, dwLenToRead, 0);
if (SOCKET_ERROR == bytes_transfered) { if (-1 == bytes_transfered) {
if (WSAEWOULDBLOCK == WSAGetLastError()) { if (EAGAIN == errno) {
return; return;
} }
} }
if (bytes_transfered <= 0) { if (bytes_transfered <= 0) {
printf("client offline\n"); printf("Client %d offline\n", clientSock);
closesocket(clientSock); clientSock = INVALID_SOCKET; close(clientSock); clientSock = INVALID_SOCKET;
clientBuffer.clear(); clientBuffer.clear();
} else { } else {
clientBuffer.wpos += bytes_transfered; clientBuffer.wpos += bytes_transfered;
...@@ -189,7 +221,7 @@ int main(int argc, char** argv) ...@@ -189,7 +221,7 @@ int main(int argc, char** argv)
} }
if (clientBuffer.wpos == BUFF_SIZE) { if (clientBuffer.wpos == BUFF_SIZE) {
memmove_s(clientBuffer.buff, BUFF_SIZE, clientBuffer.buff + clientBuffer.rpos, bytes_not_commited); memmove(clientBuffer.buff, clientBuffer.buff + clientBuffer.rpos, bytes_not_commited);
memset(clientBuffer.buff + bytes_not_commited, 0, BUFF_SIZE - bytes_not_commited); memset(clientBuffer.buff + bytes_not_commited, 0, BUFF_SIZE - bytes_not_commited);
clientBuffer.wpos -= clientBuffer.rpos; clientBuffer.rpos = 0; clientBuffer.wpos -= clientBuffer.rpos; clientBuffer.rpos = 0;
result = do_handle(); result = do_handle();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment