晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/alt/ruby18/share/ri/1.8/system/Socket/ |
| Current File : //opt/alt/ruby18/share/ri/1.8/system/Socket/accept-i.yaml |
--- !ruby/object:RI::MethodDescription
aliases: []
block_params:
comment:
- !ruby/struct:SM::Flow::P
body: Accepts an incoming connection returning an array containing a new Socket object and a string holding the <tt>struct</tt> sockaddr information about the caller.
- !ruby/struct:SM::Flow::H
level: 3
text: Example
- !ruby/struct:SM::Flow::VERB
body: " # In one script, start this first\n require 'socket'\n include Socket::Constants\n socket = Socket.new( AF_INET, SOCK_STREAM, 0 )\n sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )\n socket.bind( sockaddr )\n socket.listen( 5 )\n client, client_sockaddr = socket.accept\n puts "The client said, '#{client.readline.chomp}'"\n client.puts "Hello from script one!"\n socket.close\n\n # In another script, start this second\n require 'socket'\n include Socket::Constants\n socket = Socket.new( AF_INET, SOCK_STREAM, 0 )\n sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )\n socket.connect( sockaddr )\n socket.puts "Hello from script 2."\n puts "The server said, '#{socket.readline.chomp}'"\n socket.close\n"
- !ruby/struct:SM::Flow::H
level: 3
text: Unix-based Exceptions
- !ruby/struct:SM::Flow::P
body: "On unix-based based systems the following system exceptions may be raised if the call to <em>accept</em> fails:"
- !ruby/object:SM::Flow::LIST
contents:
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::EAGAIN - O_NONBLOCK is set for the <tt>socket</tt> file descriptor and no connections are parent to be accepted
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::EWOULDBLOCK - same as Errno::EAGAIN
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::EBADF - the <tt>socket</tt> is not a valid file descriptor
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::ECONNABORTED - a connection has been aborted
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::EFAULT - the socket's internal address or address length parameter cannot be access or written
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::EINTR - the <em>accept</em> method was interrupted by a signal that was caught before a valid connection arrived
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::EINVAL - the <tt>socket</tt> is not accepting connections
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::EMFILE - OPEN_MAX file descriptors are currently open in the calling process
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::ENOBUFS - no buffer space is available
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::ENOMEM - there was insufficient memory available to complete the operation
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::ENOSR - there was insufficient STREAMS resources available to complete the operation
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::ENFILE - the maximum number of file descriptors in the system are already open
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::ENOTSOCK - the <tt>socket</tt> does not refer to a socket
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::EOPNOTSUPP - the socket type for the calling <tt>socket</tt> does not support accept connections
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::EPROTO - a protocol error has occurred
type: :BULLET
- !ruby/struct:SM::Flow::H
level: 3
text: Windows Exceptions
- !ruby/struct:SM::Flow::P
body: "On Windows systems the following system exceptions may be raised if the call to <em>accept</em> fails:"
- !ruby/object:SM::Flow::LIST
contents:
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::ECONNRESET - an incoming connection was indicated, but was terminated by the remote peer prior to accepting the connection
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::EFAULT - the socket's internal address or address length parameter is too small or is not a valid part of the user space address
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::EINVAL - the <em>listen</em> method was not invoked prior to calling <em>accept</em>
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::EINPROGRESS - a blocking Windows Sockets 1.1 call is in progress or the service provider is still processing a callback function
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::EMFILE - the queue is not empty, upong etry to <em>accept</em> and there are no socket descriptors available
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::ENETDOWN - the network is down
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::ENOBUFS - no buffer space is available
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::ENOTSOCK - <tt>socket</tt> is not a socket
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::EOPNOTSUPP - <tt>socket</tt> is not a type that supports connection-oriented service.
- !ruby/struct:SM::Flow::LI
label: "*"
body: Errno::EWOULDBLOCK - <tt>socket</tt> is marked as nonblocking and no connections are present to be accepted
type: :BULLET
- !ruby/struct:SM::Flow::H
level: 3
text: See
- !ruby/object:SM::Flow::LIST
contents:
- !ruby/struct:SM::Flow::LI
label: "*"
body: accept manual pages on unix-based systems
- !ruby/struct:SM::Flow::LI
label: "*"
body: accept function in Microsoft's Winsock functions reference
type: :BULLET
full_name: Socket#accept
is_singleton: false
name: accept
params: |
socket.accept => [ socket, string ]
visibility: public
|