SOCKET 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) {
int len = 0, err;
unsigned char buf[SILC_SOCKET_READ_SIZE];
SOCKET fd = sock->sock;
+ int argp;
+
+ if (SILC_IS_DISABLED(sock))
+ return -1;
SILC_LOG_DEBUG(("Reading data from socket %d", fd));
+ /* Check whether there is data available, without calling recv(). */
+ ioctlsocket(fd, FIONREAD, (unsigned long *)&argp);
+ if (argp == 0) {
+ /* Is this kludge or what? Without this thing this contraption
+ does not work at all!?. */
+ SleepEx(1, TRUE);
+ SILC_LOG_DEBUG(("Could not read immediately, will do it later"));
+ return -2;
+ }
+
/* Read the data from the socket. */
len = recv(fd, buf, sizeof(buf), 0);
if (len == SOCKET_ERROR) {