gras_trp_bufdata_t *data=sock->bufdata;
XBT_IN;
- if (data->in.size || data->out.size)
+ if (data->in.size!=data->in.pos) {
+ WARN1("Socket closed, but %d bytes were unread",data->in.size - data->in.pos);
+ }
+
+ if (data->out.size!=data->out.pos) {
+ DEBUG2("Flush the socket before closing (in=%d,out=%d)",data->in.size, data->out.size);
gras_trp_buf_flush(sock);
+ }
+
if (data->in.data)
- xbt_free(data->in.data);
+ free(data->in.data);
if (data->out.data)
- xbt_free(data->out.data);
- xbt_free(data);
+ free(data->out.data);
+ free(data);
super->socket_close(sock);
}
gras_trp_bufdata_t *data=sock->bufdata;
XBT_IN;
- size = (int)htonl(data->out.size);
- DEBUG1("Send the size (=%d)",data->out.size);
+ if (! (data->out.size-data->out.pos) ) {
+ DEBUG0("Nothing to flush");
+ return no_error;
+ }
+
+ size = (int)htonl(data->out.size-data->out.pos);
+ DEBUG1("Send the size (=%d)",data->out.size-data->out.pos);
TRY(super->chunk_send(sock,(char*) &size, 4));
DEBUG1("Send the chunk (size=%d)",data->out.size);