added socklen_t test and sa_family_t test into configure.ac

This commit is contained in:
hyunghwan.chung
2018-01-11 16:29:43 +00:00
parent b31049f808
commit b95102f953
6 changed files with 286 additions and 19 deletions

View File

@ -38,6 +38,76 @@ struct sck_t
/* there are more fields in the actual object */
};
#if (MOO_SIZEOF_SOCKLEN_T > 0)
//#error x
#endif
#if (MOO_SIZEOF_INT8_T > 0)
#error x
#endif
#if (MOO_SIZEOF_SOCKLEN_T == 1)
#if defined(MOO_SOCKLEN_T_IS_SIGNED)
typedef moo_int8_t sck_len_t;
#else
typedef moo_uint8_t sck_len_t;
#endif
#elif (MOO_SIZEOF_SOCKLEN_T == 2)
#if defined(MOO_SOCKLEN_T_IS_SIGNED)
typedef moo_int16_t sck_len_t;
#else
typedef moo_uint16_t sck_len_t;
#endif
#elif (MOO_SIZEOF_SOCKLEN_T == 4)
#if defined(MOO_SOCKLEN_T_IS_SIGNED)
typedef moo_int32_t sck_len_t;
#else
typedef moo_uint32_t sck_len_t;
#endif
#elif (MOO_SIZEOF_SOCKLEN_T == 8)
#if defined(MOO_SOCKLEN_T_IS_SIGNED)
typedef moo_int64_t sck_len_t;
#else
typedef moo_uint64_t sck_len_t;
#endif
#else
# error UNSUPPORT sck_len_t size
#endif
#if (MOO_SIZEOF_SA_FAMILY_T == 1)
#if defined(MOO_SA_FAMILY_T_IS_SIGNED)
typedef moo_int8_t sck_addr_family_t;
#else
typedef moo_uint8_t sck_addr_family_t;
#endif
#elif (MOO_SIZEOF_SA_FAMILY_T == 2)
#if defined(MOO_SA_FAMILY_T_IS_SIGNED)
typedef moo_int16_t sck_addr_family_t;
#else
typedef moo_uint16_t sck_addr_family_t;
#endif
#elif (MOO_SIZEOF_SA_FAMILY_T == 4)
#if defined(MOO_SA_FAMILY_T_IS_SIGNED)
typedef moo_int32_t sck_addr_family_t;
#else
typedef moo_uint32_t sck_addr_family_t;
#endif
#elif (MOO_SIZEOF_SA_FAMILY_T == 8)
#if defined(MOO_SA_FAMILY_T_IS_SIGNED)
typedef moo_int64_t sck_addr_family_t;
#else
typedef moo_uint64_t sck_addr_family_t;
#endif
#else
# error UNSUPPORT sck_addr_family_t size
#endif
struct sck_addr_t
{
sck_addr_family_t family;
moo_uint8_t data[1];
};
typedef struct sck_addr_t sck_addr_t;
#if defined(__cplusplus)
extern "C" {

View File

@ -400,7 +400,7 @@ TODO:
moo_seterrbfmt (moo, MOO_EINVAL, "scope id too large");
return -1; /* overflow */
}
nwad->in6.sin6_scope_id= x;
nwad->in6.sin6_scope_id = x;
p++;
}
while (p < end && *p >= '0' && *p <= '9');

View File

@ -143,31 +143,28 @@ static moo_pfrc_t pf_connect (moo_t* moo, moo_ooi_t nargs)
oop_sck_t sck;
int fd, oldfl, n;
moo_errnum_t errnum;
moo_oop_t arg;
sck = (oop_sck_t)MOO_STACK_GETRCV(moo, nargs);
arg = MOO_STACK_GETARG(moo, nargs, 1);
MOO_PF_CHECK_RCV (moo,
MOO_OOP_IS_POINTER(sck) &&
MOO_OBJ_BYTESOF(sck) >= (MOO_SIZEOF(*sck) - MOO_SIZEOF(moo_obj_t)) &&
MOO_OOP_IS_SMOOI(sck->handle));
MOO_PF_CHECK_ARGS (moo, nargs, MOO_OBJ_IS_BYTE_POINTER(arg));
fd = MOO_OOP_TO_SMOOI(sck->handle);
oldfl = fcntl(fd, F_GETFL, 0);
if (oldfl == -1 || fcntl(fd, F_SETFL, oldfl | O_NONBLOCK) == -1) goto oops_syserr;
{
struct sockaddr_in sin;
memset (&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = inet_addr ("192.168.1.145");
sin.sin_port = htons(12345);
do
{
n = connect(fd, (struct sockaddr*)&sin, sizeof(sin));
//n = connect(fd, (struct sockaddr*)MOO_OBJ_GET_BYTE_SLOT(arg), addrlen);
}
while (n == -1 && errno == EINTR);
}
if (n == -1 && errno != EINPROGRESS)
{