1 | #ifndef SWRAPSOCK_H
|
---|
2 | #define SWRAPSOCK_H
|
---|
3 |
|
---|
4 | #include "machdefs.h"
|
---|
5 | #include "pexceptions.h"
|
---|
6 |
|
---|
7 | #include <unistd.h>
|
---|
8 | #include <iostream>
|
---|
9 |
|
---|
10 | #include <sys/types.h>
|
---|
11 | #include <sys/socket.h>
|
---|
12 | #include <netinet/in.h>
|
---|
13 |
|
---|
14 |
|
---|
15 | namespace SOPHYA {
|
---|
16 |
|
---|
17 | /*!
|
---|
18 | \class SocketException
|
---|
19 | \ingroup SysTools
|
---|
20 | \brief Exception class used by IP socket wrapper classes in SysTools module
|
---|
21 | */
|
---|
22 |
|
---|
23 | class SocketException : public PException {
|
---|
24 | public:
|
---|
25 | explicit SocketException(const char * m) : PException(m) {}
|
---|
26 | explicit SocketException(const string& m) : PException(m) {}
|
---|
27 | };
|
---|
28 |
|
---|
29 |
|
---|
30 | // --------------------------
|
---|
31 | // Classe de base pour enrober l'initialisation et l'utilisation
|
---|
32 | // des sockets pour les connections IP.
|
---|
33 | // --------------------------
|
---|
34 |
|
---|
35 | class Socket {
|
---|
36 | public:
|
---|
37 | Socket(int s=-1);
|
---|
38 | Socket(Socket const & a);
|
---|
39 | virtual ~Socket();
|
---|
40 |
|
---|
41 | size_t Send(const char * buff, size_t len, int flag=0);
|
---|
42 | size_t Receive(char * buff, size_t len, int flag=0);
|
---|
43 | size_t SendAll(const char * buff, size_t len);
|
---|
44 | size_t ReceiveAll(char * buff, size_t len);
|
---|
45 |
|
---|
46 | virtual int Close();
|
---|
47 |
|
---|
48 | inline Socket& operator=(Socket const & a)
|
---|
49 | { Set(a); return (*this); }
|
---|
50 |
|
---|
51 | inline int SetPrtLevel(int lev=0)
|
---|
52 | { if (lev > 0) prtlev = lev; return prtlev; }
|
---|
53 | inline long NBytesSent() { return totsnd; }
|
---|
54 | inline long NBytesRecv() { return totrcv; }
|
---|
55 |
|
---|
56 | protected:
|
---|
57 | void Set(Socket const & a);
|
---|
58 |
|
---|
59 | int skt;
|
---|
60 | long tstart; /* Temps de demarrage en sec */
|
---|
61 | long tlast; /* Temps de derniere acces en sec */
|
---|
62 | long totrcv; /* Nb total d'octets recus */
|
---|
63 | long totsnd; /* Nb total d'octets envoyes */
|
---|
64 | long dts; /* Dt en ms send (File or Data) */
|
---|
65 | long nbbs; /* Nb Octets send (File or Data) */
|
---|
66 | long dtr; /* Dt en ms recv (File or Data) */
|
---|
67 | long nbbr; /* Nb Octets recv (File or Data) */
|
---|
68 | long lstdt; /* Dt en ms last send or receive */
|
---|
69 | long lstnbb; /* Nb bytes last send or receive */
|
---|
70 | long errcnt; /* Total error count */
|
---|
71 | int prtlev;
|
---|
72 | };
|
---|
73 |
|
---|
74 |
|
---|
75 | // --------------------------
|
---|
76 | // Classe ServerSocket - A instancier cote serveur
|
---|
77 | // --------------------------
|
---|
78 |
|
---|
79 | class ServerSocket : public Socket
|
---|
80 | {
|
---|
81 | public :
|
---|
82 | ServerSocket(int port, int nconmax);
|
---|
83 | Socket WaitClientConnection();
|
---|
84 | virtual int Close(); // redefinition de la methode de Socket::Close()
|
---|
85 |
|
---|
86 | protected:
|
---|
87 | int portid;
|
---|
88 | struct sockaddr_in ipskt;
|
---|
89 | int NConMax;
|
---|
90 | int nclitot;
|
---|
91 | };
|
---|
92 |
|
---|
93 | // --------------------------
|
---|
94 | // Classe ClientSocket - A instancier cote client
|
---|
95 | // --------------------------
|
---|
96 |
|
---|
97 | class ClientSocket : public Socket
|
---|
98 | {
|
---|
99 | public :
|
---|
100 | ClientSocket(string const& srvname, int port);
|
---|
101 | ClientSocket(const char* srvname, int port);
|
---|
102 | ClientSocket(ClientSocket const& a);
|
---|
103 | inline ClientSocket& operator=(ClientSocket const& a)
|
---|
104 | { SetC(a); return (*this); }
|
---|
105 | protected:
|
---|
106 | void SetC(ClientSocket const& a);
|
---|
107 | void InitConnection(const char* srvname, int port);
|
---|
108 |
|
---|
109 | int portid;
|
---|
110 | struct sockaddr_in ipskt;
|
---|
111 |
|
---|
112 | };
|
---|
113 |
|
---|
114 | } // Fin du namespace
|
---|
115 |
|
---|
116 | #endif
|
---|