Integer type name change.
[silc.git] / lib / silcutil / unix / silcunixsockconn.c
index acd8cb5eb5662bee12613756cac86e9ab9878d64..dada9d6e73cb49a2255f88ae64bd04abe12d51ed 100644 (file)
@@ -33,6 +33,9 @@ int silc_socket_write(SilcSocketConnection sock)
   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) {
@@ -42,7 +45,8 @@ int silc_socket_write(SilcSocketConnection sock)
        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;
     }
 
@@ -62,9 +66,12 @@ int silc_socket_write(SilcSocketConnection sock)
 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. */
@@ -74,7 +81,8 @@ int silc_socket_read(SilcSocketConnection sock)
       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;
   }
 
@@ -84,7 +92,7 @@ int silc_socket_read(SilcSocketConnection sock)
   /* 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)
@@ -97,3 +105,22 @@ int silc_socket_read(SilcSocketConnection sock)
 
   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;
+}