X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7c1fe6e308f9714c1077dd4c41589560165fd1e1..e6a8d8720982ba6b6e58c71ee002eab1b222e6ca:/src/gras/Transport/transport_plugin_tcp.c diff --git a/src/gras/Transport/transport_plugin_tcp.c b/src/gras/Transport/transport_plugin_tcp.c index e5b5d4c466..cfce9e2422 100644 --- a/src/gras/Transport/transport_plugin_tcp.c +++ b/src/gras/Transport/transport_plugin_tcp.c @@ -14,7 +14,7 @@ #include "xbt/misc.h" #include "xbt/sysdep.h" #include "xbt/ex.h" -#include "transport_private.h" +#include "gras/Transport/transport_private.h" /* FIXME maybe READV is sometime a good thing? */ #undef HAVE_READV @@ -140,24 +140,31 @@ static XBT_INLINE void gras_trp_sock_socket_server(gras_trp_plugin_t ignored, THROW1(system_error,0,"Socket allocation failed: %s", sock_errstr(sock_errno)); if (setsockopt(sock->sd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on))) - THROW1(system_error,0,"setsockopt failed, cannot condition the socket: %s", + THROW1(system_error,0, + "setsockopt failed, cannot condition the socket: %s", sock_errstr(sock_errno)); - if (setsockopt(sock->sd, SOL_SOCKET, SO_RCVBUF, (char *)&size, sizeof(size)) || - setsockopt(sock->sd, SOL_SOCKET, SO_SNDBUF, (char *)&size, sizeof(size))) { + if ( setsockopt(sock->sd, SOL_SOCKET, SO_RCVBUF, + (char *)&size, sizeof(size)) + || setsockopt(sock->sd, SOL_SOCKET, SO_SNDBUF, + (char *)&size, sizeof(size))) { WARN1("setsockopt failed, cannot set buffer size: %s", sock_errstr(sock_errno)); } if (bind(sock->sd, (struct sockaddr *)&server, sizeof(server)) == -1) { tcp_close(sock->sd); - THROW2(system_error,0,"Cannot bind to port %d: %s",sock->port, sock_errstr(sock_errno)); + THROW2(system_error,0, + "Cannot bind to port %d: %s", + sock->port, sock_errstr(sock_errno)); } DEBUG2("Listen on port %d (sd=%d)",sock->port, sock->sd); if (listen(sock->sd, 5) < 0) { tcp_close(sock->sd); - THROW2(system_error,0,"Cannot listen on port %d: %s",sock->port,sock_errstr(sock_errno)); + THROW2(system_error,0, + "Cannot listen on port %d: %s", + sock->port,sock_errstr(sock_errno)); } VERB2("Openned a server socket on port %d (sd=%d)",sock->port,sock->sd); @@ -230,7 +237,9 @@ static gras_socket_t gras_trp_sock_socket_accept(gras_socket_t sock) { } VERB3("Accepted from %s:%d (sd=%d)", res->peer_name,res->peer_port,sd); - + xbt_dynar_push(((gras_trp_procdata_t) + gras_libdata_by_id(gras_trp_libdata_id))->sockets,&res); + XBT_OUT; return res; } @@ -313,6 +322,13 @@ gras_trp_tcp_recv_withbuffer(gras_socket_t sock, int got = 0; + if (sock->recvd) { + data[0] = sock->recvd_val; + sock->recvd = 0; + got++; + bufsize--; + } + while (size>got) { int status = 0; @@ -334,7 +350,7 @@ gras_trp_tcp_recv_withbuffer(gras_socket_t sock, bufsize -= status; got += status; } else { - THROW1(system_error,0,"Socket closed by remote side (got %d bytes before this)", + THROW1(system_error,errno,"Socket closed by remote side (got %d bytes before this)", got); } }