Skip to content
Snippets Groups Projects
Commit c7253cd6 authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

catch more sendrecv errors + increase get() timout to 5 minutes

parent ea454c77
No related branches found
No related tags found
No related merge requests found
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
// WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS // WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE // ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
// OF THIS SOFTWARE. // OF THIS SOFTWARE.
// //
// Please report all bugs and problems to <gmsh@geuz.org>. // Please report all bugs and problems to <gmsh@geuz.org>.
#ifndef _GMSH_SOCKET_H_ #ifndef _GMSH_SOCKET_H_
...@@ -61,7 +61,7 @@ class GmshSocket{ ...@@ -61,7 +61,7 @@ class GmshSocket{
// that 65535: if we receive a type > 65535 we assume that we // that 65535: if we receive a type > 65535 we assume that we
// receive data from a machine with a different byte ordering, and // receive data from a machine with a different byte ordering, and
// we swap the bytes in the payload) // we swap the bytes in the payload)
enum MessageType{ enum MessageType{
GMSH_START = 1, GMSH_START = 1,
GMSH_STOP = 2, GMSH_STOP = 2,
GMSH_INFO = 10, GMSH_INFO = 10,
...@@ -87,16 +87,18 @@ class GmshSocket{ ...@@ -87,16 +87,18 @@ class GmshSocket{
// the socket name // the socket name
std::string _sockname; std::string _sockname;
// send some data over the socket // send some data over the socket
void _SendData(const void *buffer, int bytes) int _SendData(const void *buffer, int bytes)
{ {
const char *buf = (const char *)buffer; const char *buf = (const char *)buffer;
int sofar = 0; int sofar = 0;
int remaining = bytes; int remaining = bytes;
do { do {
int len = send(_sock, buf + sofar, remaining, 0); int len = send(_sock, buf + sofar, remaining, 0);
if(len < 0) return -1; // error
sofar += len; sofar += len;
remaining -= len; remaining -= len;
} while(remaining > 0); } while(remaining > 0);
return bytes;
} }
// receive some data over the socket // receive some data over the socket
int _ReceiveData(void *buffer, int bytes) int _ReceiveData(void *buffer, int bytes)
...@@ -195,7 +197,7 @@ class GmshSocket{ ...@@ -195,7 +197,7 @@ class GmshSocket{
*swap = 0; *swap = 0;
if(_ReceiveData(type, sizeof(int))){ if(_ReceiveData(type, sizeof(int))){
if(*type < 0) return 0; if(*type < 0) return 0;
if(*type > 65535){ if(*type > 65535){
// the data comes from a machine with different endianness and // the data comes from a machine with different endianness and
// we must swap the bytes // we must swap the bytes
*swap = 1; *swap = 1;
...@@ -405,7 +407,7 @@ class GmshServer : public GmshSocket{ ...@@ -405,7 +407,7 @@ class GmshServer : public GmshSocket{
CloseSocket(tmpsock); CloseSocket(tmpsock);
throw "Socket listen failed"; throw "Socket listen failed";
} }
// wait until we get data // wait until we get data
int ret = NonBlockingWait(tmpsock, 0.5, timeout); int ret = NonBlockingWait(tmpsock, 0.5, timeout);
if(ret){ if(ret){
...@@ -447,6 +449,6 @@ class GmshServer : public GmshSocket{ ...@@ -447,6 +449,6 @@ class GmshServer : public GmshSocket{
CloseSocket(_sock); CloseSocket(_sock);
return 0; return 0;
} }
}; };
#endif #endif
...@@ -743,8 +743,8 @@ namespace onelab{ ...@@ -743,8 +743,8 @@ namespace onelab{
_gmshClient->SendMessage(GmshSocket::GMSH_PARAM_QUERY_ALL, msg.size(), &msg[0]); _gmshClient->SendMessage(GmshSocket::GMSH_PARAM_QUERY_ALL, msg.size(), &msg[0]);
while(1){ while(1){
// stop if we have no communications for 10 secs // stop if we have no communications for 5 minutes
int ret = _gmshClient->Select(10, 0); int ret = _gmshClient->Select(500, 0);
if(!ret){ if(!ret){
_gmshClient->Info("Timout: aborting remote get"); _gmshClient->Info("Timout: aborting remote get");
return false; return false;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment