1515
1616uv_loop_t * loop ;
1717
18- char * (* ondata_cb )(void * client , size_t len , char * data );
19- void (* onconnect_cb )(void * * client );
20- void (* ondisconnect_cb )(void * client );
18+ char * (* ondata_cb )(void * stream , void * clientdata , size_t len , char * data );
19+ void (* onconnect_cb )(void * stream , void * * clientdata );
20+ void (* ondisconnect_cb )(void * stream , void * clientdata );
2121
2222static void on_alloc (uv_handle_t * handle , size_t suggested_size , uv_buf_t * buf ) {
2323 buf -> len = suggested_size ;
@@ -34,18 +34,19 @@ static void on_write(uv_write_t *req, int status) {
3434
3535static void on_read (uv_stream_t * stream , ssize_t nread , const uv_buf_t * buf ) {
3636 if (nread == UV_EOF ) {
37- ondisconnect_cb (stream -> data );
38- uv_close ((uv_handle_t * )stream , NULL );
37+ ondisconnect_cb (stream , stream -> data );
38+ uv_close ((uv_handle_t * )stream , NULL );
3939 return ;
4040 }
4141
4242 if (nread < 0 ) {
43- shout ("read failed (error %d)\n" , nread );
44- uv_close ((uv_handle_t * )stream , NULL );
43+ shout ("read failed (error %zd)\n" , nread );
44+ ondisconnect_cb (stream , stream -> data );
45+ uv_close ((uv_handle_t * )stream , NULL );
4546 return ;
4647 }
4748
48- char * response = ondata_cb (stream -> data , nread , buf -> base );
49+ char * response = ondata_cb (stream , stream -> data , nread , buf -> base );
4950 free (buf -> base );
5051
5152 if (response ) {
@@ -71,16 +72,16 @@ static void on_connect(uv_stream_t *server, int status) {
7172 return ;
7273 }
7374 uv_tcp_nodelay (client , 1 );
74- onconnect_cb (& client -> data );
75+ onconnect_cb (client , & client -> data );
7576 uv_read_start ((uv_stream_t * )client , on_alloc , on_read );
7677}
7778
7879int eventwrap (
7980 const char * host ,
8081 int port ,
81- char * (* ondata )(void * client , size_t len , char * data ),
82- void (* onconnect )(void * * client ),
83- void (* ondisconnect )(void * client )
82+ char * (* ondata )(void * stream , void * clientdata , size_t len , char * data ),
83+ void (* onconnect )(void * stream , void * * clientdata ),
84+ void (* ondisconnect )(void * stream , void * clientdata )
8485) {
8586 ondata_cb = ondata ;
8687 onconnect_cb = onconnect ;
@@ -109,3 +110,10 @@ int eventwrap(
109110
110111 return uv_run (loop , UV_RUN_DEFAULT );
111112}
113+
114+ void write_to_stream (void * stream , char * data ) {
115+ uv_write_t * wreq = malloc (sizeof (uv_write_t ));
116+ uv_buf_t wbuf = uv_buf_init (data , strlen (data ));
117+ uv_write (wreq , (uv_stream_t * )stream , & wbuf , 1 , on_write );
118+ free (data );
119+ }
0 commit comments