added socklen_t test and sa_family_t test into configure.ac
This commit is contained in:
@ -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" {
|
||||
|
@ -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');
|
||||
|
@ -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)
|
||||
{
|
||||
|
Reference in New Issue
Block a user