diff --git a/src/messages.cpp b/src/messages.cpp
index fd5ffafad89943df7d2b23cab689c765751dd028..42bf901e7c55af8231141a17cb9bb905ace018f9 100644
--- a/src/messages.cpp
+++ b/src/messages.cpp
@@ -12,7 +12,6 @@ int Message::sendMessage(unsigned char* stringMessage){
   unsigned char* mesgReturn; // mensagem que recebe de retorno (ack, erro, etc)
   char *receiptMessage = (char*)malloc(sizeof(char*)*64);
   char erro1[10], erro2[10], sucesso[10], buffer[10];
-  struct timeval tv;
   struct pollfd ufds[1];
 
   // Calcula o tamanho da msg
@@ -63,20 +62,24 @@ int Message::sendMessage(unsigned char* stringMessage){
     subMensagem[i].setData(subData, tipo, i);
   }
 
-  // Deveríamos verificar se é cd ls put ou get, não?
-  // Assim colocamos 3, 4, 5 ou 6, respectivamente, antes da msg
-
-  // tv.tv_sec = 5;  // TIMEOUT de 5 segundos
-  // tv.tv_usec = 0;
-
-  // Caso haja só uma mensagem
-  if (numberOfMessages == 1){
+  // Caso haja só uma ou duas mensagens
+  if (numberOfMessages < 3){
     SubMessage answer;
     while(!success){
-      error = send(soquete, subMensagem[0].objToString() , size+4, 0);
+      if (numberOfMessages == 1){
+        error = send(soquete, subMensagem[0].objToString() , size+4, 0);
+      } else if (numberOfMessages == 2){
+        error = send(soquete, subMensagem[0].objToString() , 68, 0);
+        error = send(soquete, subMensagem[1].objToString() , sizeLastMessage+4, 0);
+      } else {
+        cout << "Algo parece estranho, sua mensagem contém conteúdo?\n" << endl;
+        cout << "Erro: Mensagem nula (messages.cpp::sendMessage)" << endl;
+      }
+
       if(error == -1){
         cout << "Problema com o envio da mensagem (messages.cpp::sendMessage)" << endl;
       }
+
       // recebe resposta
       ufds[0].fd = soquete;
       ufds[0].events = POLLIN;
@@ -90,10 +93,18 @@ int Message::sendMessage(unsigned char* stringMessage){
           answer.stringToObj((unsigned char*)receiptMessage);
           // Lê começo da mensagem e vê se tem o delimitador de início
           if(answer.getStartMessage() == 0x7E){ // 0x7E = 01111110
-            if(answer.getData()[0] == '1'){
-              success = 1; // YAY
-            } else {
-              cout << "Mensagem entregue com erro (messages.cpp::sendMessage)" << endl;
+            if(numberOfMessages == 1){
+              if(answer.getData()[0] == '1'){
+                success = 1; // YAY
+              } else {
+                cout << "Mensagem entregue com erro (messages.cpp::sendMessage)" << endl;
+              }
+            } else { // numero de mensagens = 2
+              if(answer.getData() == '1 1'){ // aceitou ambas as msgs
+                success = 1; // YAY
+              } else {
+                cout << "Mensagem entregue com erro (messages.cpp::sendMessage)" << endl;
+              }
             }
           }
         }
@@ -103,33 +114,6 @@ int Message::sendMessage(unsigned char* stringMessage){
       }
     }
     success = 0;
-  } else if (numberOfMessages == 2){
-    // Caso hajam 2 mensagens
-    // Único caso em que se reenvia tudo se houver erro
-    SubMessage answer;
-    while(!success){
-      error = send(soquete, subMensagem[0].objToString() , 68, 0);
-      error = send(soquete, subMensagem[1].objToString() , sizeLastMessage+4, 0);
-      if(error == -1){
-        cout << "Problema com o envio da mensagem (messages.cpp::sendMessage)" << endl;
-      }
-      // recebe resposta
-      if((setsockopt(soquete, SOL_SOCKET, SO_RCVTIMEO, (unsigned char *)&tv,sizeof(struct timeval)) >= 0)){
-        answer.stringToObj(string);
-        // Lê começo da mensagem e vê se tem o delimitador de início
-        if(answer.getStartMessage() == 0x7E){ // 0x7E = 01111110
-          if(answer.getData()[0] == '1'){
-            success = 1; // YAY
-          } else {
-            cout << "Mensagem entregue com erro (messages.cpp::sendMessage)" << endl;
-          }
-        }
-      } else {
-        cout << "Tempo limite de resposta excedido :c\n" << endl;
-        cout << "TIMEOUT ATINGIDO (messages.cpp::sendMessage)" << endl;
-      }
-    }
-    success = 0;
   } else if (numberOfMessages > 2){
     i = 0;
     while (i < numberOfMessages - 3){
@@ -138,21 +122,29 @@ int Message::sendMessage(unsigned char* stringMessage){
       error = send(soquete, subMensagem[i+2].objToString() , 68, 0);
 
       // recebe resposta
-      if((setsockopt(soquete, SOL_SOCKET, SO_RCVTIMEO, (unsigned char *)&tv,sizeof(struct timeval)) >= 0)){
-        answer.stringToObj(string);
-        // Lê começo da mensagem e vê se tem o delimitador de início
-        if(answer.getStartMessage() == 0x7E){ // 0x7E = 01111110
-          erro1 = '1 ' + itoa(i, buffer, 10);
-          erro2 = '1 ' + itoa(i+1, buffer, 10);
-          sucesso = '1 ' + itoa(i+2, buffer, 10);
-          if(answer.getData() == erro1){
-            i += 1;
-          } else if (answer.getData() == erro2){
-            i += 2;
-          } else if (answer.getData() == sucesso){
-            i += 3;
-          } else {
-            // Nenhuma das 3 mensagens foi recebida
+      ufds[0].fd = soquete;
+      ufds[0].events = POLLIN;
+      // vetor de pollfd, numero de buffers observados, timeout(ms)
+      rv = poll(ufds, 1, 500);
+      if(rv){
+        if(rv == -1){
+          cout << "Erro no recebimento de resposta (messages.cpp::sendMessage)" << endl;
+        } else {
+          answer.stringToObj(string);
+          // Lê começo da mensagem e vê se tem o delimitador de início
+          if(answer.getStartMessage() == 0x7E){ // 0x7E = 01111110
+            erro1 = '1 ' + itoa(i, buffer, 10);
+            erro2 = '1 ' + itoa(i+1, buffer, 10);
+            sucesso = '1 ' + itoa(i+2, buffer, 10);
+            if(answer.getData() == erro1){
+              i += 1;
+            } else if (answer.getData() == erro2){
+              i += 2;
+            } else if (answer.getData() == sucesso){
+              i += 3;
+            } else {
+              // Nenhuma das 3 mensagens foi recebida
+            }
           }
         }
       } else {