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] | ||||
|     [&i/o-would-block                 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] | ||||
|   )) | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Abdulaziz Ghuloum
						Abdulaziz Ghuloum