added a function to return an address length given a socket address object.
fixed pf_connect to get the right address argument
This commit is contained in:
parent
b95102f953
commit
38ac31d307
@ -248,7 +248,7 @@ class Socket(Object) from 'sck'
|
|||||||
|
|
||||||
method(#primitive) open(domain, type, proto).
|
method(#primitive) open(domain, type, proto).
|
||||||
method(#primitive) _close.
|
method(#primitive) _close.
|
||||||
method(#primitive) _connect(a,b,c).
|
method(#primitive) _connect(addr).
|
||||||
method(#primitive) endConnect.
|
method(#primitive) endConnect.
|
||||||
|
|
||||||
method(#primitive) readBytes: bytes.
|
method(#primitive) readBytes: bytes.
|
||||||
@ -329,7 +329,7 @@ extend Socket
|
|||||||
signal: s2 afterSecs: 10;
|
signal: s2 afterSecs: 10;
|
||||||
addAsyncSemaphore: s1;
|
addAsyncSemaphore: s1;
|
||||||
addAsyncSemaphore: s2.
|
addAsyncSemaphore: s2.
|
||||||
self _connect(1, 2, 3).
|
self _connect((SocketAddress fromString: '192.168.1.1:80')).
|
||||||
] ifCurtailed: [
|
] ifCurtailed: [
|
||||||
## rollback
|
## rollback
|
||||||
sa value: s2.
|
sa value: s2.
|
||||||
@ -394,6 +394,7 @@ s basicSize dump.
|
|||||||
'****************************' dump.
|
'****************************' dump.
|
||||||
*)
|
*)
|
||||||
|
|
||||||
|
(***********************************
|
||||||
s := ByteArray new: 100.
|
s := ByteArray new: 100.
|
||||||
s basicFillFrom: 0 with: ($a asInteger) count: 100.
|
s basicFillFrom: 0 with: ($a asInteger) count: 100.
|
||||||
s basicFillFrom: 50 with: ($b asInteger) count: 50.
|
s basicFillFrom: 50 with: ($b asInteger) count: 50.
|
||||||
@ -420,6 +421,8 @@ s basicSize dump.
|
|||||||
##s := IP4SocketAddress new.
|
##s := IP4SocketAddress new.
|
||||||
##s dump.
|
##s dump.
|
||||||
thisProcess terminate.
|
thisProcess terminate.
|
||||||
|
**************************)
|
||||||
|
|
||||||
inact := [:sck :state |
|
inact := [:sck :state |
|
||||||
| data n |
|
| data n |
|
||||||
(*
|
(*
|
||||||
|
@ -116,6 +116,9 @@ extern "C" {
|
|||||||
MOO_EXPORT int moo_mod_sck (moo_t* moo, moo_mod_t* mod);
|
MOO_EXPORT int moo_mod_sck (moo_t* moo, moo_mod_t* mod);
|
||||||
MOO_EXPORT int moo_mod_sck_addr (moo_t* moo, moo_mod_t* mod);
|
MOO_EXPORT int moo_mod_sck_addr (moo_t* moo, moo_mod_t* mod);
|
||||||
|
|
||||||
|
|
||||||
|
sck_len_t moo_sck_addr_len (sck_addr_t* addr);
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -485,6 +485,7 @@ static moo_pfrc_t pf_from_string (moo_t* moo, moo_ooi_t nargs)
|
|||||||
return MOO_PF_FAILURE;
|
return MOO_PF_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MOO_DEBUG1(moo, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxx %O\n", rcv);
|
||||||
MOO_STACK_SETRETTORCV (moo, nargs);
|
MOO_STACK_SETRETTORCV (moo, nargs);
|
||||||
return MOO_PF_SUCCESS;
|
return MOO_PF_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -536,3 +537,30 @@ int moo_mod_sck_addr (moo_t* moo, moo_mod_t* mod)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
sck_len_t moo_sck_addr_len (sck_addr_t* addr)
|
||||||
|
{
|
||||||
|
switch (addr->family)
|
||||||
|
{
|
||||||
|
#if defined(AF_INET)
|
||||||
|
case AF_INET:
|
||||||
|
return MOO_SIZEOF(struct sockaddr_in);
|
||||||
|
#endif
|
||||||
|
#if defined(AF_INET)
|
||||||
|
case AF_INET6:
|
||||||
|
return MOO_SIZEOF(struct sockaddr_in6);
|
||||||
|
#endif
|
||||||
|
#if defined(AF_PACKET)
|
||||||
|
case AF_PACKET:
|
||||||
|
return MOO_SIZEOF(struct sockaddr_ll);
|
||||||
|
#endif
|
||||||
|
#if defined(AF_UNIX)
|
||||||
|
case AF_UNIX:
|
||||||
|
return MOO_SIZEOF(struct sockaddr_un);
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ static moo_pfrc_t pf_connect (moo_t* moo, moo_ooi_t nargs)
|
|||||||
moo_oop_t arg;
|
moo_oop_t arg;
|
||||||
|
|
||||||
sck = (oop_sck_t)MOO_STACK_GETRCV(moo, nargs);
|
sck = (oop_sck_t)MOO_STACK_GETRCV(moo, nargs);
|
||||||
arg = MOO_STACK_GETARG(moo, nargs, 1);
|
arg = MOO_STACK_GETARG(moo, nargs, 0);
|
||||||
|
|
||||||
MOO_PF_CHECK_RCV (moo,
|
MOO_PF_CHECK_RCV (moo,
|
||||||
MOO_OOP_IS_POINTER(sck) &&
|
MOO_OOP_IS_POINTER(sck) &&
|
||||||
@ -161,7 +161,7 @@ static moo_pfrc_t pf_connect (moo_t* moo, moo_ooi_t nargs)
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
//n = connect(fd, (struct sockaddr*)MOO_OBJ_GET_BYTE_SLOT(arg), addrlen);
|
n = connect(fd, (struct sockaddr*)MOO_OBJ_GET_BYTE_SLOT(arg), moo_sck_addr_len((sck_addr_t*)MOO_OBJ_GET_BYTE_SLOT(arg)));
|
||||||
}
|
}
|
||||||
while (n == -1 && errno == EINTR);
|
while (n == -1 && errno == EINTR);
|
||||||
|
|
||||||
@ -326,7 +326,7 @@ static moo_pfinfo_t pfinfos[] =
|
|||||||
{
|
{
|
||||||
{ I, { 'b','i','n','d','\0' }, 0, { pf_bind_socket, 1, 1 } },
|
{ I, { 'b','i','n','d','\0' }, 0, { pf_bind_socket, 1, 1 } },
|
||||||
{ I, { 'c','l','o','s','e','\0' }, 0, { pf_close_socket, 0, 0 } },
|
{ I, { 'c','l','o','s','e','\0' }, 0, { pf_close_socket, 0, 0 } },
|
||||||
{ I, { 'c','o','n','n','e','c','t','\0' }, 0, { pf_connect, 3, 3 } },
|
{ I, { 'c','o','n','n','e','c','t','\0' }, 0, { pf_connect, 1, 1 } },
|
||||||
{ I, { 'e','n','d','C','o','n','n','e','c','t','\0' }, 0, { pf_end_connect, 0, 0 } },
|
{ I, { 'e','n','d','C','o','n','n','e','c','t','\0' }, 0, { pf_end_connect, 0, 0 } },
|
||||||
{ I, { 'o','p','e','n','\0' }, 0, { pf_open_socket, 3, 3 } },
|
{ I, { 'o','p','e','n','\0' }, 0, { pf_open_socket, 3, 3 } },
|
||||||
{ I, { 'r','e','a','d','B','y','t','e','s',':','\0' }, 0, { pf_read_socket, 1, 1 } },
|
{ I, { 'r','e','a','d','B','y','t','e','s',':','\0' }, 0, { pf_read_socket, 1, 1 } },
|
||||||
|
Loading…
Reference in New Issue
Block a user