Using recv instead of read, for slightly non-blocking reads, without losing blocking writes

This commit is contained in:
Michael Jumper
2010-09-06 22:57:53 -07:00
parent 9eb796bf94
commit 5a5be19518
3 changed files with 7 additions and 9 deletions

View File

@@ -18,17 +18,11 @@ char __GUACIO_BAS64_CHARACTERS[64] = {
GUACIO* guac_open(int fd) {
int flags;
GUACIO* io = malloc(sizeof(GUACIO));
io->ready = 0;
io->written = 0;
io->fd = fd;
/* Set O_NONBLOCK */
flags = fcntl(io->fd, F_GETFL, 0);
fcntl(io->fd, F_SETFL, flags | O_NONBLOCK);
/* Allocate instruction buffer */
io->instructionbuf_size = 1024;
io->instructionbuf = malloc(io->instructionbuf_size);

View File

@@ -4,6 +4,9 @@
#include <errno.h>
#include <png.h>
#include <sys/types.h>
#include <sys/socket.h>
#include "guacio.h"
#include "protocol.h"
@@ -181,10 +184,11 @@ int __guac_fill_instructionbuf(GUACIO* io) {
int retval;
/* Attempt to fill buffer */
retval = read(
retval = recv(
io->fd,
io->instructionbuf + io->instructionbuf_used_length,
io->instructionbuf_size - io->instructionbuf_used_length
io->instructionbuf_size - io->instructionbuf_used_length,
0
);
if (retval < 0)