int fd = sock->sock;
SilcBuffer src = sock->outbuf;
+ if (!src)
+ return -2;
if (SILC_IS_DISABLED(sock))
return -1;
if (src->len > 0) {
ret = write(fd, src->data, src->len);
if (ret < 0) {
- if (errno == EAGAIN) {
+ if (errno == EAGAIN || errno == EINTR) {
SILC_LOG_DEBUG(("Could not write immediately, will do it later"));
return -2;
}
{
SilcSocketConnection sock = context;
sock->qos->applied = TRUE;
- silc_schedule_set_listen_fd(sock->qos->schedule, sock->sock,
- (SILC_TASK_READ | SILC_TASK_WRITE), TRUE);
+ if (sock->users > 1)
+ silc_schedule_set_listen_fd(sock->qos->schedule, sock->sock,
+ (SILC_TASK_READ | SILC_TASK_WRITE), TRUE);
sock->qos->applied = FALSE;
silc_socket_free(sock);
}