-
Notifications
You must be signed in to change notification settings - Fork 45
Expand file tree
/
Copy pathevent-test.ss
More file actions
73 lines (56 loc) · 2.01 KB
/
Copy pathevent-test.ss
File metadata and controls
73 lines (56 loc) · 2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Copyright 2016-2080 evilbinary.
;author:evilbinary on 12/24/16.
;email:rootdebug@163.com
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(import (net socket-ffi) (cffi cffi) (net event2-ffi) )
;;(cffi-log #t)
(define base (cffi-alloc 4))
(define listener (cffi-alloc 4))
(set! base (event-base-new))
(define sockaddr (make-sockaddr-in AF_INET INADDR_ANY 8080 ))
(def-function-callback
make-listener-cb
(void* int void* int void*) void)
(def-function-callback
make-write-cb
(void* void*) void)
(def-function-callback
make-read-cb
(void* void*) void)
(def-function-callback
make-conn-cb
(void* int void*) void)
(define read-cb (make-read-cb
(lambda (bev user-data)
(let ((input (bufferevent-get-input bev))
(len 0))
(set! len (evbuffer-get-length input))
(display (format "inputlen ~a\n" len))
(display (format "~s\n" (cffi-string (evbuffer-pullup input len) ))) ))))
(define write-cb (make-write-cb
(lambda (bev user-data)
(let ((output (bufferevent-get-output bev)))
(if (= 0 (evbuffer-get-length output))
(display "replay\n")
(bufferevent-free bev))) )))
(define conn-cb (make-write-cb
(lambda (bev event user-data)
(display (format "event=~a\n" event))
(bufferevent-free bev)
)))
(define listener-cb (make-listener-cb
(lambda (listener-ptr fd sockaddr-ptr socklen ptr)
(let ((bev (bufferevent-socket-new base fd 1)))
(bufferevent-setcb bev read-cb write-cb conn-cb 0)
(bufferevent-enable bev 4)
(bufferevent-enable bev 2)
(bufferevent-write bev "hello" 5)
(display "listener\n")))))
(set! listener (evconnlistener-new-bind base listener-cb base 10 -1 sockaddr 16))
(if (= 0 listener )
(display (format "erro Could not create a listener!\n")))
;;(define signal-event (evsignal-new base SIGINT signal-cb base ))
(event-base-dispatch base)
(evconnlistener-free listener)
(event-base-free base)