-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.h
More file actions
62 lines (50 loc) · 1.4 KB
/
server.h
File metadata and controls
62 lines (50 loc) · 1.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifndef SERVER_H_INCLUDED
#define SERVER_H_INCLUDED
#endif
#include "asynet.h"
#define ONE_LINE "\n\r"
#define DEFAULT_BUFLEN 1460
enum IO_STATE{
AS_ACCEPT,
AS_READ,
AS_WRITE,
AS_CLOSE,
AS_CONNECT
};
typedef struct _MY_OVERLAPPED
{
OVERLAPPED p_Overlapped;
SOCKET p_client_socket;
WSABUF p_wsa_buf;
WSABUF p_wsa_cache;
char p_rz_buff[DEFAULT_BUFLEN];
char p_sz_buff[DEFAULT_BUFLEN];
enum IO_STATE p_iostate;
} PER_OVERLAPPED, *LPPER_OVERLAPPED;
typedef struct _PER_HANDLE_DATA {
SOCKET socket;
SOCKADDR_STORAGE client_addr;
} PER_HANDLE_DATA, * LPPER_HANDLE_DATA;
typedef struct _SERVER_INSTANCE{
char *hostname;
char *port;
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
int is_fin; // 1 means running, 0 means stop
int io_core; // count of io_worker thread
} SERVER_INSTANCE,*LPSERVER_INSTANCE;
typedef struct _LISTENER_INSTANCE{
SOCKET listen_socket;
HANDLE init_iocp;
struct addrinfo *result;
int *is_fin;
} LISTENER_INSTANCE,*LPLISTENER_INSTANCE;
HANDLE create_server(LPSERVER_INSTANCE instance);
DWORD asyiowork(void* lpvoid);
int _do_accept(LPPER_OVERLAPPED lpOverlapped);
WSABUF _do_read(LPPER_OVERLAPPED lpOverlapped,DWORD dwNumberOfBytes);
int _do_write();
int buildnet();
int destnet();