changed Socket to work in the edge trigger mode
This commit is contained in:
@ -396,13 +396,15 @@ static moo_pfrc_t pf_read_socket (moo_t* moo, moo_ooi_t nargs)
|
||||
return MOO_PF_FAILURE;
|
||||
}
|
||||
|
||||
n = recv (fd, MOO_OBJ_GET_BYTE_SLOT(buf), MOO_OBJ_GET_SIZE(buf), 0);
|
||||
if (n <= -1 && errno != EWOULDBLOCK)
|
||||
n = recv(fd, MOO_OBJ_GET_BYTE_SLOT(buf), MOO_OBJ_GET_SIZE(buf), 0);
|
||||
if (n <= -1 && errno != EWOULDBLOCK && errno != EAGAIN)
|
||||
{
|
||||
moo_seterrwithsyserr (moo, errno);
|
||||
return MOO_PF_FAILURE;
|
||||
}
|
||||
|
||||
/* NOTE: on EWOULDBLOCK or EGAIN, -1 is returned */
|
||||
|
||||
MOO_ASSERT (moo, MOO_IN_SMOOI_RANGE(n));
|
||||
|
||||
MOO_STACK_SETRET (moo, nargs, MOO_SMOOI_TO_OOP(n));
|
||||
@ -438,7 +440,6 @@ static moo_pfrc_t pf_write_socket (moo_t* moo, moo_ooi_t nargs)
|
||||
return MOO_PF_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
offset = 0;
|
||||
maxlen = MOO_OBJ_GET_SIZE(buf);
|
||||
length = maxlen;
|
||||
@ -457,7 +458,7 @@ static moo_pfrc_t pf_write_socket (moo_t* moo, moo_ooi_t nargs)
|
||||
if (nargs >= 3)
|
||||
{
|
||||
tmp = MOO_STACK_GETARG(moo, nargs, 2);
|
||||
if (moo_inttooow (moo, tmp, &length) <= 0)
|
||||
if (moo_inttooow(moo, tmp, &length) <= 0)
|
||||
{
|
||||
moo_seterrbfmt (moo, MOO_EINVAL, "invalid length - %O", tmp);
|
||||
return MOO_PF_FAILURE;
|
||||
@ -468,13 +469,14 @@ static moo_pfrc_t pf_write_socket (moo_t* moo, moo_ooi_t nargs)
|
||||
if (length > maxlen - offset) length = maxlen - offset;
|
||||
}
|
||||
|
||||
n = send (fd, &MOO_OBJ_GET_BYTE_SLOT(buf)[offset], length, 0);
|
||||
if (n <= -1 && errno != EWOULDBLOCK)
|
||||
n = send(fd, &MOO_OBJ_GET_BYTE_SLOT(buf)[offset], length, 0);
|
||||
if (n <= -1 && errno != EWOULDBLOCK && errno != EAGAIN)
|
||||
{
|
||||
moo_seterrwithsyserr (moo, errno);
|
||||
return MOO_PF_FAILURE;
|
||||
}
|
||||
|
||||
/* NOTE: on EWOULDBLOCK or EGAIN, -1 is returned */
|
||||
MOO_ASSERT (moo, MOO_IN_SMOOI_RANGE(n));
|
||||
|
||||
MOO_STACK_SETRET (moo, nargs, MOO_SMOOI_TO_OOP(n));
|
||||
|
Reference in New Issue
Block a user