diff --git a/moo/kernel/Socket.moo b/moo/kernel/Socket.moo index b153094..8a0a1c8 100644 --- a/moo/kernel/Socket.moo +++ b/moo/kernel/Socket.moo @@ -45,7 +45,7 @@ extend Socket method asyncConnect: connectBlock { - | s1 s2 sg sa | + | s1 s2 sa | s1 := Semaphore new. s2 := Semaphore new. @@ -61,14 +61,15 @@ extend Socket s1 signalAction: sa. s2 signalAction: sa. -## TODO: unsignal s1 s2, remove them from System when exception occurs. - System signal: s1 onOutput: self.handle. - System signal: s2 after: 10. - - System addAsyncSemaphore: s1. - System addAsyncSemaphore: s2. - - self connect(1, 2, 3). + [ + System signal: s1 onOutput: self.handle. + System signal: s2 afterSecs: 10. + System addAsyncSemaphore: s1. + System addAsyncSemaphore: s2. + self connect(1, 2, 3). + ] ifCurtailed: [ + sa value: s2. + ] } method asyncRead: readBlock @@ -81,7 +82,7 @@ extend Socket s2 signalAction: [:sem | readBlock value: false]. System signal: s1 onInput: self.handle. - System signal: s2 after: 10. + System signal: s2 afterSecs: 10. } (* @@ -95,7 +96,7 @@ extend Socket s2 signalAction: [:sem | writeBlock value: false]. System signal: s1 onOutput: self.handle. - System signal: s2 after: 10. + System signal: s2 afterSecs: 10. } *) @@ -109,12 +110,21 @@ class MyObject(Object) | s | [ s := Socket domain: Socket.Domain.INET type: Socket.Type.STREAM. - s dump. s asyncConnect: [:result | ##s endConnect: result. ##s beginRead: xxx. - 'CONNECTED NOW.............' dump. + if (result) + { + 'CONNECTED NOW.............' dump. + s asyncRead: [:data | + data dump. + ] + } + else + { + 'UNABLE TO CONNECT............' dump. + } ]. while (true) diff --git a/moo/kernel/System.moo b/moo/kernel/System.moo index 68320d3..bd17f2b 100644 --- a/moo/kernel/System.moo +++ b/moo/kernel/System.moo @@ -21,6 +21,7 @@ class System(Apex) { ^self.asyncsg removeSemaphore: sem } + method(#class) handleAsyncEvent { ^self.asyncsg wait. diff --git a/moo/mod/sck.c b/moo/mod/sck.c index 644f25b..cf810be 100644 --- a/moo/mod/sck.c +++ b/moo/mod/sck.c @@ -134,7 +134,7 @@ struct sockaddr_in sin; memset (&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = inet_addr ("1.234.53.142"); -sin.sin_port = htons(80); +sin.sin_port = htons(12345); do { n = connect(fd, (struct sockaddr*)&sin, sizeof(sin));