int fd = sock->sock;
SilcBuffer src = sock->outbuf;
+ if (SILC_IS_DISABLED(sock))
+ return -1;
+
SILC_LOG_DEBUG(("Writing data to socket %d", fd));
if (src->len > 0) {
SILC_LOG_DEBUG(("Could not write immediately, will do it later"));
return -2;
}
- SILC_LOG_ERROR(("Cannot write to socket: %s", strerror(errno)));
+ SILC_LOG_DEBUG(("Cannot write to socket: %s", strerror(errno)));
+ sock->sock_error = errno;
return -1;
}
int silc_socket_read(SilcSocketConnection sock)
{
int len = 0;
- unsigned char buf[SILC_PACKET_READ_SIZE];
+ unsigned char buf[SILC_SOCKET_READ_SIZE];
int fd = sock->sock;
+ if (SILC_IS_DISABLED(sock))
+ return -1;
+
SILC_LOG_DEBUG(("Reading data from socket %d", fd));
/* Read the data from the socket. */
SILC_LOG_DEBUG(("Could not read immediately, will do it later"));
return -2;
}
- SILC_LOG_ERROR(("Cannot read from socket: %d:%s", fd, strerror(errno)));
+ SILC_LOG_DEBUG(("Cannot read from socket: %d:%s", fd, strerror(errno)));
+ sock->sock_error = errno;
return -1;
}
/* Insert the data to the buffer. */
if (!sock->inbuf)
- sock->inbuf = silc_buffer_alloc(SILC_PACKET_DEFAULT_SIZE);
+ sock->inbuf = silc_buffer_alloc(SILC_SOCKET_BUF_SIZE);
/* If the data does not fit to the buffer reallocate it */
if ((sock->inbuf->end - sock->inbuf->tail) < len)
return len;
}
+
+/* Returns human readable socket error message */
+
+bool silc_socket_get_error(SilcSocketConnection sock, char *error,
+ SilcUInt32 error_len)
+{
+ char *err;
+
+ if (!sock->sock_error)
+ return FALSE;
+
+ err = strerror(sock->sock_error);
+ if (strlen(err) > error_len)
+ return FALSE;
+
+ memset(error, 0, error_len);
+ memcpy(error, err, strlen(err));
+ return TRUE;
+}