sprintf(header,"%s",EDG_WLL_LOG_SOCKET_HEADER);
header[EDG_WLL_LOG_SOCKET_HEADER_LENGTH]='\0';
if ((err = edg_wll_gss_write_full(&ctx->connections->connPool[conn].gss, header, EDG_WLL_LOG_SOCKET_HEADER_LENGTH, &ctx->p_tmp_timeout, &count, &gss_code)) < 0) {
- answer = handle_gss_failures(ctx,err,&gss_code,"edg_wll_gss_write_full()");
- edg_wll_UpdateError(ctx,answer,"edg_wll_log_write(): error sending header");
- return -1;
+ switch (answer = handle_gss_failures(ctx,err,&gss_code,"edg_wll_gss_write_full()")) {
+ case ENOTCONN:
+ edg_wll_log_close(ctx,conn);
+ if (edg_wll_log_connect(ctx,&conn) ||
+ edg_wll_gss_write_full(&ctx->connections->connPool[conn].gss, header, EDG_WLL_LOG_SOCKET_HEADER_LENGTH, &ctx->p_tmp_timeout, &count, &gss_code) < 0) {
+ edg_wll_UpdateError(ctx,answer,"edg_wll_log_write(): error sending header");
+ return -1;
+ }
+ break;
+ case 0:
+ break;
+ default:
+ edg_wll_UpdateError(ctx,answer,"edg_wll_log_write(): error sending header");
+ return -1;
+ }
}
sent += count;
#endif
count = 0;
if ((err = edg_wll_gss_write_full(&ctx->connections->connPool[conn].gss, size_end, 4, &ctx->p_tmp_timeout, &count, &gss_code)) < 0) {
- answer = handle_gss_failures(ctx,err,&gss_code,"edg_wll_gss_write_full()");
- edg_wll_UpdateError(ctx,answer,"edg_wll_log_write(): error sending message size");
- return -1;
+ switch (answer = handle_gss_failures(ctx,err,&gss_code,"edg_wll_gss_write_full()")) {
+ case ENOTCONN:
+ edg_wll_log_close(ctx,conn);
+ if (edg_wll_log_connect(ctx,&conn) ||
+ edg_wll_gss_write_full(&ctx->connections->connPool[conn].gss, size_end, 4, &ctx->p_tmp_timeout, &count, &gss_code) < 0) {
+ edg_wll_UpdateError(ctx,answer,"edg_wll_log_write(): error sending message size");
+ return -1;
+ }
+ break;
+ case 0:
+ break;
+ default:
+ edg_wll_UpdateError(ctx,answer,"edg_wll_log_write(): error sending message size");
+ return -1;
+
+ }
}
sent += count;
#endif
count = 0;
if (( err = edg_wll_gss_write_full(&ctx->connections->connPool[conn].gss, logline, size, &ctx->p_tmp_timeout, &count, &gss_code)) < 0) {
- answer = handle_gss_failures(ctx,err,&gss_code,"edg_wll_gss_write_full()");
- edg_wll_UpdateError(ctx,answer,"edg_wll_log_write(): error sending message");
- return -1;
+ switch (answer = handle_gss_failures(ctx,err,&gss_code,"edg_wll_gss_write_full()")) {
+ case ENOTCONN:
+ edg_wll_log_close(ctx,conn);
+ if (edg_wll_log_connect(ctx,&conn) ||
+ edg_wll_gss_write_full(&ctx->connections->connPool[conn].gss, logline, size, &ctx->p_tmp_timeout, &count, &gss_code) < 0) {
+ edg_wll_UpdateError(ctx,answer,"edg_wll_log_write(): error sending message");
+ return -1;
+ }
+ break;
+ case 0:
+ break;
+ default:
+ edg_wll_UpdateError(ctx,answer,"edg_wll_log_write(): error sending message");
+ return -1;
+ }
}
sent += count;
#endif
count = 0;
if ((err = edg_wll_gss_read_full(&ctx->connections->connPool[conn].gss, answer_end, 4, &ctx->p_tmp_timeout, &count, &gss_code)) < 0 ) {
- answer = handle_gss_failures(ctx,err,&gss_code,"edg_wll_gss_read_full()");
- edg_wll_UpdateError(ctx,answer,"edg_wll_log_read(): error reading answer from local-logger");
- return -1;
- } else {
- answer = answer_end[3]; answer <<=8;
- answer |= answer_end[2]; answer <<=8;
- answer |= answer_end[1]; answer <<=8;
- answer |= answer_end[0];
+ switch (answer = handle_gss_failures(ctx,err,&gss_code,"edg_wll_gss_read_full()")) {
+ case ENOTCONN:
+ edg_wll_log_close(ctx,conn);
+ if (edg_wll_log_connect(ctx,&conn) ||
+ edg_wll_gss_read_full(&ctx->connections->connPool[conn].gss, answer_end, 4, &ctx->p_tmp_timeout, &count, &gss_code) < 0 ) {
+ edg_wll_UpdateError(ctx,answer,"edg_wll_log_read(): error reading answer from local-logger");
+ return -1;
+ }
+ break;
+ case 0:
+ break;
+ default:
+ edg_wll_UpdateError(ctx,answer,"edg_wll_log_read(): error reading answer from local-logger");
+ return -1;
+ }
+ }
+ answer = answer_end[3]; answer <<=8;
+ answer |= answer_end[2]; answer <<=8;
+ answer |= answer_end[1]; answer <<=8;
+ answer |= answer_end[0];
#ifdef EDG_WLL_LOG_STUB
- fprintf(stderr,"edg_wll_log_read: read answer \"%d\"\n",answer);
+ fprintf(stderr,"edg_wll_log_read: read answer \"%d\"\n",answer);
#endif
- edg_wll_SetError(ctx,answer,"edg_wll_log_read(): answer read from locallogger");
- }
+ edg_wll_SetError(ctx,answer,"edg_wll_log_read(): answer read from locallogger");
#ifdef EDG_WLL_LOG_STUB
fprintf(stderr,"edg_wll_log_read: done (remaining timeout %d.%06d sec)\n",