Added a tcp-connect-nonblocking-example.ss to demonstrate how to
handle nonblocking sockets by continuous polling.
This commit is contained in:
		
							parent
							
								
									64dac92831
								
							
						
					
					
						commit
						4c3b17436f
					
				|  | @ -0,0 +1,32 @@ | ||||||
|  | #!/usr/bin/env scheme-script | ||||||
|  | 
 | ||||||
|  | (import (ikarus)) | ||||||
|  | 
 | ||||||
|  | ;;; very simple demo for how to connect to a server,  | ||||||
|  | ;;; send a request and receive a response. | ||||||
|  | 
 | ||||||
|  | ;;; Here, we use an asynchronous IO socket.  We wrap the whole | ||||||
|  | ;;; operation with an exception handler to handle the would-block | ||||||
|  | ;;; conditions.  If we do get a would-block condition, we just | ||||||
|  | ;;; return, causing the read/write operation to be restarted until | ||||||
|  | ;;; it succeeds.  Pretty lame at this point, but it works. | ||||||
|  | 
 | ||||||
|  | (define (http-cat host) | ||||||
|  |   (with-exception-handler | ||||||
|  |     (lambda (c) | ||||||
|  |       ;;; just return and let it retry until it succeeds | ||||||
|  |       (unless (i/o-would-block-condition? c) | ||||||
|  |         (raise c))) | ||||||
|  |     (lambda () | ||||||
|  |       (let-values ([(op ip) (tcp-connect-nonblocking host "http")]) | ||||||
|  |         (let ([op (transcoded-port op (native-transcoder))] | ||||||
|  |               [ip (transcoded-port ip (native-transcoder))]) | ||||||
|  |           (display "GET /\n" op) | ||||||
|  |           (display (get-string-all ip)) | ||||||
|  |           (close-input-port ip) | ||||||
|  |           (close-output-port op)))))) | ||||||
|  | 
 | ||||||
|  | (http-cat "www.google.com") | ||||||
|  | (newline) | ||||||
|  | ;(http-cat "127.0.0.1") | ||||||
|  | 
 | ||||||
|  | @ -1 +1 @@ | ||||||
| 1293 | 1294 | ||||||
|  |  | ||||||
|  | @ -1380,7 +1380,7 @@ | ||||||
|     [tcp-connect-nonblocking          i] |     [tcp-connect-nonblocking          i] | ||||||
|     [&i/o-would-block                 i] |     [&i/o-would-block                 i] | ||||||
|     [make-i/o-would-block-condition   i] |     [make-i/o-would-block-condition   i] | ||||||
|     [i/o-would-block-condition        i] |     [i/o-would-block-condition?       i] | ||||||
|     [i/o-would-block-port             i] |     [i/o-would-block-port             i] | ||||||
|   )) |   )) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Abdulaziz Ghuloum
						Abdulaziz Ghuloum