/* * call-seq: * basicsocket.recv_nonblock(maxlen) => mesg * basicsocket.recv_nonblock(maxlen, flags) => mesg * * Receives up to _maxlen_ bytes from +socket+ using recvfrom(2) after * O_NONBLOCK is set for the underlying file descriptor. * _flags_ is zero or more of the +MSG_+ options. * The result, _mesg_, is the data received. * * When recvfrom(2) returns 0, Socket#recv_nonblock returns * an empty string as data. * The meaning depends on the socket: EOF on TCP, empty packet on UDP, etc. * * === Parameters * * +maxlen+ - the number of bytes to receive from the socket * * +flags+ - zero or more of the +MSG_+ options * * === Example * serv = TCPServer.new("127.0.0.1", 0) * af, port, host, addr = serv.addr * c = TCPSocket.new(addr, port) * s = serv.accept * c.send "aaa", 0 * IO.select([s]) * p s.recv_nonblock(10) #=> "aaa" * * Refer to Socket#recvfrom for the exceptions that may be thrown if the call * to _recv_nonblock_ fails. * * BasicSocket#recv_nonblock may raise any error corresponding to recvfrom(2) failure, * including Errno::EAGAIN. * * === See * * Socket#recvfrom */ static VALUE bsock_recv_nonblock(argc, argv, sock) int argc; VALUE *argv; VALUE sock; { return s_recvfrom_nonblock(sock, argc, argv, RECV_RECV); }