summaryrefslogtreecommitdiff
path: root/i/simulotron/src/socket/socket_client.cc
diff options
context:
space:
mode:
authorhaller2006-01-21 21:10:23 +0000
committerhaller2006-01-21 21:10:23 +0000
commita8cd31b9681938b1cea0d02e884962fd8f114208 (patch)
treeeeccb77227e02d919f75d9a97ea3c7557d2be2fc /i/simulotron/src/socket/socket_client.cc
parent270ede560382bbce481b18895276d9802ae931ee (diff)
- ajout de quelques structures de données
- importation de la class nonCopyable et utilisation dans quelques classes - création d'une class exception simulotron_exception - ajout d'un paramètre "bloquant" pour recevoir une GS - modification de la valeur de retour des fonction servant à récupérer une GS - Mise en place de la poignée de main lors de la connection d'un module au hub - Ajout d'un message template pour les message vide - suppression des fonction (get|put)Char et getFD de la classe socket - modification de la fonction GSMessage::getString à deux arguments - ajout d'un test_hub - ajout de la class ComH (un peu comme ComC mais coté hub)
Diffstat (limited to 'i/simulotron/src/socket/socket_client.cc')
-rw-r--r--i/simulotron/src/socket/socket_client.cc52
1 files changed, 23 insertions, 29 deletions
diff --git a/i/simulotron/src/socket/socket_client.cc b/i/simulotron/src/socket/socket_client.cc
index 6e18c2e..9dd19fa 100644
--- a/i/simulotron/src/socket/socket_client.cc
+++ b/i/simulotron/src/socket/socket_client.cc
@@ -35,14 +35,14 @@ SocketClient::SocketClient (void)
// Crée le file descriptor du socket
socket_ = socket (PF_INET, SOCK_STREAM, 0);
if (socket_ < 0)
- throw errno_exception ("La chaussette n'a pas pu être tricoté", errno);
+ throw errno_exception ("Socket: La chaussette n'a pas pu être tricoté", errno);
}
SocketClient::SocketClient (SocketServer & socketServer)
{
socket_ = socketServer.accept ();
if (socket_ < 0)
- throw errno_exception ("Problème lors de la construction d'une chaussette cliente par accept", errno);
+ throw errno_exception ("Socket: Problème lors de la construction d'une chaussette cliente par accept", errno);
}
SocketClient::~SocketClient (void)
@@ -55,7 +55,7 @@ void
SocketClient::connect (const Address & address)
{
if (::connect (socket_, address.getSockaddr (), sizeof (sockaddr_in)) < 0)
- throw errno_exception ("Impossible de mettre la chaussette", errno);
+ throw errno_exception ("Socket: Impossible de mettre la chaussette", errno);
}
void
@@ -64,12 +64,22 @@ SocketClient::connect (const std::string & address, int port)
connect (Address(address, port));
}
-std::string
-SocketClient::read (void)
+bool
+SocketClient::read (std::string & strReaded, bool bloquant)
{
- std::string str;
int charReaded;
char buffer[BUFFER_SIZE];
+ // Vérifie si il y a quelque chose à lire et retourne si non
+ if (!bloquant)
+ {
+ fd_set fds;
+ timeval tv = {0, 0};
+ FD_ZERO(&fds);
+ FD_SET(socket_, &fds);
+ if(select(socket_ + 1, &fds, NULL, NULL, &tv) == 0)
+ return false;
+ }
+ strReaded.clear();
do
{
charReaded = ::read (socket_, buffer, BUFFER_SIZE - 1);
@@ -77,9 +87,9 @@ SocketClient::read (void)
throw errno_exception ("SocketClient: problème de lecture", errno);
//buffer[charReaded] = 0;
//str += buffer;
- str.append(buffer, charReaded);
+ strReaded.append(buffer, charReaded);
}while (charReaded == BUFFER_SIZE - 1);
- return str;
+ return true;
}
void
@@ -100,24 +110,8 @@ SocketClient::write (const std::string & str)
}
}
-char
-SocketClient::getChar (void)
-{
- char getted;
- if (::read (socket_, &getted, 1) < 0)
- throw errno_exception ("SocketClient: erreur d'écriture (write()) ", errno);
- return getted;
-}
-
-void
-SocketClient::putChar (char c)
-{
- if (::write (socket_, &c, 1) < 0)
- throw errno_exception ("SocketClient: erreur d'écriture (write()) ", errno);
-}
-
-int
-SocketClient::getFD(void)
-{
- return socket_;
-}
+//int
+//SocketClient::getFD(void)
+//{
+// return socket_;
+//}