|Subject:||Re: [Chicken-users] socket egg: socket-receive blocks?|
|Date:||Sat, 15 Jun 2013 09:49:25 +0200|
Should be fixed in 0.2.3. Let me know.JimOn Jun 14, 2013, at 3:24 PM, Jim Ursetto <address@hidden> wrote:Hi,It's a bug in the socket egg; nonblocking mode is only set during a socket-connect or socket-accept, which won't be called for UDP.Temporary workaround: (use posix) and then, after creating the socket, do either:(##sys#file-nonblocking! (socket-fileno *socket*))or equivalently(file-control fcntl/setfl (socket-fileno *socket*)(bitwise-ior (file-control fcntl/getfl (socket-fileno *socket*))open/nonblock))Neither workaround will work on Windows.Permanent fix: We should probably make all sockets nonblocking at creation time instead, since our machinery assumes nonblocking sockets. We could expose the set-nonblocking operation to the user, but since TCP is always nonblocking, doing this only for UDP would be strange. Thoughts?JimOn Jun 14, 2013, at 11:01 AM, Kristian Lein-Mathisen <address@hidden> wrote:_______________________________________________I have come across a problem with multiple srfi-18 threads when tryping to listen to UDP sockets:Hi Chickeners!
(set! *socket* (socket af/inet sock/dgram ))
(set! (so-reuse-address? *socket*) #t)
(socket-bind *socket* (inet-address "0.0.0.0" 5055))
;; (socket-receive ..) here blocks the prints below
;; after 1 s (about 10 hello's)
(thread-start! (lambda ()
(print "receiving ...")
(print (socket-receive *socket* 1024))
(let loop ()
(print "hello from main-thread!")
;; the hello's from the main thread continue after sending a udp packet:
;; $ echo test `date` | socat - UDP-DATAGRAM:127.0.0.1:5055,broadcast
The documentation for socket clearly states that socket-receive should not block:This call will block until data is available, but other threads can proceed.
What is wrong with my socket fd?K.
Chicken-users mailing list
|[Prev in Thread]||Current Thread||[Next in Thread]|