summaryrefslogtreecommitdiffhomepage
path: root/NetEx/NetSock.h
blob: 826d80cfffb450e8256ac3118a394b8cefe6b5a8 (plain)
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
63
64
65
66
67
68
69
70
71
72
73
/*  Project nGenEx
    Destroyer Studios LLC
    Copyright © 1997-2004. All Rights Reserved.

    SUBSYSTEM:    NetEx.lib
    FILE:         NetSock.h
    AUTHOR:       John DiCamillo


    OVERVIEW
    ========
    Network (IP) Socket
*/

#ifndef NetSock_h
#define NetSock_h

#include <windows.h>
#include "NetAddr.h"
#include "Text.h"

// +-------------------------------------------------------------------+

#define NET_MAX_TIMEOUT 1e9

class NetSock
{
public:
   static const char* TYPENAME() { return "NetSock"; }

   enum SELECT_TYPE {
      SELECT_READ  = 1,
      SELECT_WRITE = 2
   };

   NetSock(bool stream=false);
   NetSock(const NetAddr& addr, bool stream=false);
   ~NetSock();

   int      bind(const NetAddr& addr);
   int      connect(const NetAddr& addr);
   int      listen(int max_connections=5);
   NetSock* accept(NetAddr* addr=0);
   int      available();
   int      send(Text msg);
   Text     recv();
   int      sendto(Text msg, const NetAddr& dest);
   Text     recvfrom(NetAddr* a=0);
   int      select(SELECT_TYPE t=SELECT_READ,
                   long seconds=0, long microseconds=0);

   int      shutdown_input();
   int      shutdown_output();
   int      set_timeout(int msecs);
   int      close();

   DWORD    max_packet_size() const;
   bool     is_stream()       const { return stream; }
   bool     is_closed()       const { return closed; }
   int      status()          const { return stat;   }

private:
   NetSock(SOCKET s, bool stream);

   SOCKET   s;
   bool     stream;
   bool     closed;
   int      stat;
   int      current_timeout;
};


#endif NetSock_h