source: Sophya/trunk/AddOn/TAcq/swrapsock.h@ 3897

Last change on this file since 3897 was 3897, checked in by ansari, 15 years ago

Amelioration des classes PCIEToEthernet et EthernetReader pour eviter des situations de blocage lorsque lecture avec ForceSameFrameCounter, Reza 04/10/2010

File size: 2.9 KB
Line 
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
15namespace SOPHYA {
16
17/*!
18 \class SocketException
19 \ingroup SysTools
20 \brief Exception class used by IP socket wrapper classes in SysTools module
21*/
22
23class 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
35class Socket {
36public:
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
56protected:
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
79class ServerSocket : public Socket
80{
81public :
82 ServerSocket(int port, int nconmax);
83 Socket WaitClientConnection();
84 virtual int Close(); // redefinition de la methode de Socket::Close()
85
86protected:
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
97class ClientSocket : public Socket
98{
99public :
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); }
105protected:
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
Note: See TracBrowser for help on using the repository browser.