📁 File Manager Pro
v10.0.3 | PHP: 8.1.34
Server: Apache
2026-06-21 22:53:01
📂
/ (Root)
/
opt
/
alt
/
ruby19
/
share
/
doc
/
ruby
/
html
/
d1
/
deb
📍 /opt/alt/ruby19/share/doc/ruby/html/d1/deb
🔄 Refresh
✏️
Editing: udpsocket_8c_source.html
Read Only
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.14"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>Ruby: ext/socket/udpsocket.c Source File</title> <link href="../../tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="../../jquery.js"></script> <script type="text/javascript" src="../../dynsections.js"></script> <link href="../../doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td id="projectalign" style="padding-left: 0.5em;"> <div id="projectname">Ruby  <span id="projectnumber">1.9.3p551(2014-11-13revision48407)</span> </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.14 --> <script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menu.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(function() { initMenu('../../',false,false,'search.php','Search'); }); /* @license-end */</script> <div id="main-nav"></div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="../../dir_31cedd4509e06940f559c1ca2f722e02.html">ext</a></li><li class="navelem"><a class="el" href="../../dir_6df8f0b3caf41720dd2d2a13ae851a2d.html">socket</a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">udpsocket.c</div> </div> </div><!--header--> <div class="contents"> <a href="../../d1/deb/udpsocket_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/************************************************</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"></span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> udpsocket.c -</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> created at: Thu Mar 31 12:21:29 JST 1994</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"></span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> Copyright (C) 1993-2007 Yukihiro Matsumoto</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"></span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">************************************************/</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include "<a class="code" href="../../dd/d8c/rubysocket_8h.html">rubysocket.h</a>"</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">/*</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * call-seq:</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * UDPSocket.new([address_family]) => socket</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> *</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * Creates a new UDPSocket object.</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> *</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * _address_family_ should be an integer, a string or a symbol:</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * Socket::AF_INET, "AF_INET", :INET, etc.</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> *</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * UDPSocket.new #=> #<UDPSocket:fd 3></span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * UDPSocket.new(Socket::AF_INET6) #=> #<UDPSocket:fd 4></span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> *</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> */</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">static</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a></div><div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="../../d1/deb/udpsocket_8c.html#a8531bd5f5e43264b43c824182bb3910e"> 27</a></span> <a class="code" href="../../d1/deb/udpsocket_8c.html#a8531bd5f5e43264b43c824182bb3910e">udp_init</a>(<span class="keywordtype">int</span> <a class="code" href="../../df/d77/ruby_8c.html#ad1447518f4372828b8435ae82e48499e">argc</a>, <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> *<a class="code" href="../../df/d77/ruby_8c.html#af2efa898e9eed6fe6715279cb1ec35b0">argv</a>, <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> sock)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> arg;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordtype">int</span> family = AF_INET;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keywordtype">int</span> fd;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a98b91af598acb64fe8497413ce498766">rb_secure</a>(3);</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d7/d19/group__defmethod.html#gaa7bed88640f01bee619f85fda09d28d7">rb_scan_args</a>(<a class="code" href="../../df/d77/ruby_8c.html#ad1447518f4372828b8435ae82e48499e">argc</a>, <a class="code" href="../../df/d77/ruby_8c.html#af2efa898e9eed6fe6715279cb1ec35b0">argv</a>, <span class="stringliteral">"01"</span>, &arg) == 1) {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  family = <a class="code" href="../../d4/df3/constants_8c.html#a39ff0a7f7690b7524885e5140b588048">rsock_family_arg</a>(arg);</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  }</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  fd = <a class="code" href="../../da/dcc/socket_2init_8c.html#a8bb5397bff51a073e7b6a1696b843a85">rsock_socket</a>(family, SOCK_DGRAM, 0);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">if</span> (fd < 0) {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <a class="code" href="../../db/dcc/error_8c.html#aec0502b6d84cff19bb2071d1386ff177">rb_sys_fail</a>(<span class="stringliteral">"socket(2) - udp"</span>);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">return</span> <a class="code" href="../../da/dcc/socket_2init_8c.html#a94cad3a347ec1301613b0d15aaa461ec">rsock_init_sock</a>(sock, fd);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="../../d1/db0/structudp__arg.html"> 45</a></span> <span class="keyword">struct </span><a class="code" href="../../d1/db0/structudp__arg.html">udp_arg</a></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> {</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="../../d1/db0/structudp__arg.html#a31b22778dee7c7dfea3809540b5da838"> 47</a></span>  <span class="keyword">struct </span><a class="code" href="../../d6/d9d/structaddrinfo.html">addrinfo</a> *<a class="code" href="../../d1/db0/structudp__arg.html#a31b22778dee7c7dfea3809540b5da838">res</a>;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="../../d1/db0/structudp__arg.html#a46751423d195b054d224427b379dcbfa"> 48</a></span>  <span class="keywordtype">int</span> <a class="code" href="../../d1/db0/structudp__arg.html#a46751423d195b054d224427b379dcbfa">fd</a>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> };</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">static</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a></div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="../../d1/deb/udpsocket_8c.html#aeed580ab91df053e63d9a1db3ef6e711"> 52</a></span> <a class="code" href="../../d1/deb/udpsocket_8c.html#aeed580ab91df053e63d9a1db3ef6e711">udp_connect_internal</a>(<span class="keyword">struct</span> <a class="code" href="../../d1/db0/structudp__arg.html">udp_arg</a> *arg)</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> {</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordtype">int</span> fd = arg-><a class="code" href="../../d1/db0/structudp__arg.html#a46751423d195b054d224427b379dcbfa">fd</a>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">struct </span><a class="code" href="../../d6/d9d/structaddrinfo.html">addrinfo</a> *res;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">for</span> (res = arg-><a class="code" href="../../d1/db0/structudp__arg.html#a31b22778dee7c7dfea3809540b5da838">res</a>; res; res = res-><a class="code" href="../../d6/d9d/structaddrinfo.html#ac8d379469addd7ebbb7cd8f9656268d2">ai_next</a>) {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">if</span> (<a class="code" href="../../da/dcc/socket_2init_8c.html#ae6a2161106bd94d8cdd216a05fd7226c">rsock_connect</a>(fd, res-><a class="code" href="../../d6/d9d/structaddrinfo.html#a2a6343a77144ee3079f6e9e0b66c715c">ai_addr</a>, res-><a class="code" href="../../d6/d9d/structaddrinfo.html#a225a0fc5785f7956c4444ef799317994">ai_addrlen</a>, 0) >= 0) {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">return</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#aacea3516b33941ce8149098e223a7466">Qtrue</a>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#aba0717d2689eb68797421a02ab9295c6">Qfalse</a>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> <a class="code" href="../../d1/deb/udpsocket_8c.html#a40ad604cdd6ee17b28e242b226998e35">rsock_freeaddrinfo</a>(<span class="keyword">struct</span> <a class="code" href="../../d6/d9d/structaddrinfo.html">addrinfo</a> *addr);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment">/*</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment"> * call-seq:</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment"> * udpsocket.connect(host, port) => 0</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment"> *</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment"> * Connects _udpsocket_ to _host_:_port_.</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment"> *</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment"> * This makes possible to send without destination address.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment"> *</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"> * u1 = UDPSocket.new</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment"> * u1.bind("127.0.0.1", 4913)</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment"> * u2 = UDPSocket.new</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment"> * u2.connect("127.0.0.1", 4913)</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment"> * u2.send "uuuu", 0</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment"> * p u1.recvfrom(10) #=> ["uuuu", ["AF_INET", 33230, "localhost", "127.0.0.1"]]</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment"> *</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment"> */</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">static</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a></div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="../../d1/deb/udpsocket_8c.html#a4316787ccc28b31a5d2067e676524d66"> 84</a></span> <a class="code" href="../../d1/deb/udpsocket_8c.html#a4316787ccc28b31a5d2067e676524d66">udp_connect</a>(<a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> sock, <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> host, <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> port)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="../../dd/d7e/structrb__io__t.html">rb_io_t</a> *fptr;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">struct </span><a class="code" href="../../d1/db0/structudp__arg.html">udp_arg</a> arg;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> ret;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a98b91af598acb64fe8497413ce498766">rb_secure</a>(3);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  arg.<a class="code" href="../../d1/db0/structudp__arg.html#a31b22778dee7c7dfea3809540b5da838">res</a> = <a class="code" href="../../d3/de8/raddrinfo_8c.html#a10ed0188cfcef5886e9e1706816997e4">rsock_addrinfo</a>(host, port, SOCK_DGRAM, 0);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <a class="code" href="../../dc/dac/io_8h.html#aa00f0dca97539a5dd0c4e67ad5be93a3">GetOpenFile</a>(sock, fptr);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  arg.<a class="code" href="../../d1/db0/structudp__arg.html#a46751423d195b054d224427b379dcbfa">fd</a> = fptr-><a class="code" href="../../dd/d7e/structrb__io__t.html#a0d48f8e91d24ff4f382564b30c1b41c2">fd</a>;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  ret = <a class="code" href="../../d3/d57/eval_8c.html#a8061198378fb16adeb931f90540b2839">rb_ensure</a>(<a class="code" href="../../d1/deb/udpsocket_8c.html#aeed580ab91df053e63d9a1db3ef6e711">udp_connect_internal</a>, (<a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a>)&arg,</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="../../d1/deb/udpsocket_8c.html#a40ad604cdd6ee17b28e242b226998e35">rsock_freeaddrinfo</a>, (<a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a>)arg.res);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">if</span> (!ret) <a class="code" href="../../db/dcc/error_8c.html#aec0502b6d84cff19bb2071d1386ff177">rb_sys_fail</a>(<span class="stringliteral">"connect(2)"</span>);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#ac55fae7f748afd3fc2533d0d7d06cf5a">INT2FIX</a>(0);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment">/*</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment"> * call-seq:</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment"> * udpsocket.bind(host, port) #=> 0</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment"> *</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment"> * Binds _udpsocket_ to _host_:_port_.</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment"> *</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment"> * u1 = UDPSocket.new</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment"> * u1.bind("127.0.0.1", 4913)</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment"> * u1.send "message-to-self", 0, "127.0.0.1", 4913</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment"> * p u1.recvfrom(10) #=> ["message-to", ["AF_INET", 4913, "localhost", "127.0.0.1"]]</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment"> *</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment"> */</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keyword">static</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a></div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="../../d1/deb/udpsocket_8c.html#a639537d40c6e5c5d44b12bc0e5849fca"> 113</a></span> <a class="code" href="../../d1/deb/udpsocket_8c.html#a639537d40c6e5c5d44b12bc0e5849fca">udp_bind</a>(<a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> sock, <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> host, <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> port)</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="../../dd/d7e/structrb__io__t.html">rb_io_t</a> *fptr;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keyword">struct </span><a class="code" href="../../d6/d9d/structaddrinfo.html">addrinfo</a> *res0, *res;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a98b91af598acb64fe8497413ce498766">rb_secure</a>(3);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  res0 = <a class="code" href="../../d3/de8/raddrinfo_8c.html#a10ed0188cfcef5886e9e1706816997e4">rsock_addrinfo</a>(host, port, SOCK_DGRAM, 0);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="../../dc/dac/io_8h.html#aa00f0dca97539a5dd0c4e67ad5be93a3">GetOpenFile</a>(sock, fptr);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">for</span> (res = res0; res; res = res-><a class="code" href="../../d6/d9d/structaddrinfo.html#ac8d379469addd7ebbb7cd8f9656268d2">ai_next</a>) {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">if</span> (bind(fptr-><a class="code" href="../../dd/d7e/structrb__io__t.html#a0d48f8e91d24ff4f382564b30c1b41c2">fd</a>, res-><a class="code" href="../../d6/d9d/structaddrinfo.html#a2a6343a77144ee3079f6e9e0b66c715c">ai_addr</a>, res-><a class="code" href="../../d6/d9d/structaddrinfo.html#a225a0fc5785f7956c4444ef799317994">ai_addrlen</a>) < 0) {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="../../d5/dab/getaddrinfo_8c.html#a5996eed1e393834ce228347f23443db9">freeaddrinfo</a>(res0);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">return</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#ac55fae7f748afd3fc2533d0d7d06cf5a">INT2FIX</a>(0);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="../../d5/dab/getaddrinfo_8c.html#a5996eed1e393834ce228347f23443db9">freeaddrinfo</a>(res0);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <a class="code" href="../../db/dcc/error_8c.html#aec0502b6d84cff19bb2071d1386ff177">rb_sys_fail</a>(<span class="stringliteral">"bind(2)"</span>);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">return</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#ac55fae7f748afd3fc2533d0d7d06cf5a">INT2FIX</a>(0);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment">/*</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment"> * call-seq:</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment"> * udpsocket.send(mesg, flags, host, port) => numbytes_sent</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment"> * udpsocket.send(mesg, flags, sockaddr_to) => numbytes_sent</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment"> * udpsocket.send(mesg, flags) => numbytes_sent</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment"> *</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment"> * Sends _mesg_ via _udpsocket_.</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment"> *</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="comment"> * _flags_ should be a bitwise OR of Socket::MSG_* constants.</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment"> *</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment"> * u1 = UDPSocket.new</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment"> * u1.bind("127.0.0.1", 4913)</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment"> *</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment"> * u2 = UDPSocket.new</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment"> * u2.send "hi", 0, "127.0.0.1", 4913</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment"> *</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="comment"> * mesg, addr = u1.recvfrom(10)</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="comment"> * u1.send mesg, 0, addr[3], addr[1]</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment"> *</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment"> * p u2.recv(100) #=> "hi"</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="comment"> *</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment"> */</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keyword">static</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a></div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="../../d1/deb/udpsocket_8c.html#a5f0dac4c2be47aaf090df4528c7d6aff"> 156</a></span> <a class="code" href="../../d1/deb/udpsocket_8c.html#a5f0dac4c2be47aaf090df4528c7d6aff">udp_send</a>(<span class="keywordtype">int</span> <a class="code" href="../../df/d77/ruby_8c.html#ad1447518f4372828b8435ae82e48499e">argc</a>, <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> *<a class="code" href="../../df/d77/ruby_8c.html#af2efa898e9eed6fe6715279cb1ec35b0">argv</a>, <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> sock)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> flags, host, port;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <a class="code" href="../../dd/d7e/structrb__io__t.html">rb_io_t</a> *fptr;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordtype">int</span> n;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">struct </span><a class="code" href="../../d6/d9d/structaddrinfo.html">addrinfo</a> *res0, *res;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keyword">struct </span><a class="code" href="../../de/d48/structrsock__send__arg.html">rsock_send_arg</a> arg;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">if</span> (<a class="code" href="../../df/d77/ruby_8c.html#ad1447518f4372828b8435ae82e48499e">argc</a> == 2 || <a class="code" href="../../df/d77/ruby_8c.html#ad1447518f4372828b8435ae82e48499e">argc</a> == 3) {</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">return</span> <a class="code" href="../../d2/dbf/basicsocket_8c.html#adbdb4f9137cc082aadcbe62594cc00d8">rsock_bsock_send</a>(<a class="code" href="../../df/d77/ruby_8c.html#ad1447518f4372828b8435ae82e48499e">argc</a>, <a class="code" href="../../df/d77/ruby_8c.html#af2efa898e9eed6fe6715279cb1ec35b0">argv</a>, sock);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a98b91af598acb64fe8497413ce498766">rb_secure</a>(4);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <a class="code" href="../../d7/d19/group__defmethod.html#gaa7bed88640f01bee619f85fda09d28d7">rb_scan_args</a>(<a class="code" href="../../df/d77/ruby_8c.html#ad1447518f4372828b8435ae82e48499e">argc</a>, <a class="code" href="../../df/d77/ruby_8c.html#af2efa898e9eed6fe6715279cb1ec35b0">argv</a>, <span class="stringliteral">"4"</span>, &arg.<a class="code" href="../../de/d48/structrsock__send__arg.html#aa4818acf38701fbdac22df9e3868c193">mesg</a>, &<a class="code" href="../../de/d48/structrsock__send__arg.html#a2ebad644b0962dd6eeb6f929ba50fe10">flags</a>, &host, &port);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a0e80f207eb41e9010ec9f0f5f9419fea">StringValue</a>(arg.<a class="code" href="../../de/d48/structrsock__send__arg.html#aa4818acf38701fbdac22df9e3868c193">mesg</a>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  res0 = <a class="code" href="../../d3/de8/raddrinfo_8c.html#a10ed0188cfcef5886e9e1706816997e4">rsock_addrinfo</a>(host, port, SOCK_DGRAM, 0);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <a class="code" href="../../dc/dac/io_8h.html#aa00f0dca97539a5dd0c4e67ad5be93a3">GetOpenFile</a>(sock, fptr);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  arg.<a class="code" href="../../de/d48/structrsock__send__arg.html#aa294a465304806f991d0ebe25c4c4e83">fd</a> = fptr-><a class="code" href="../../dd/d7e/structrb__io__t.html#a0d48f8e91d24ff4f382564b30c1b41c2">fd</a>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  arg.<a class="code" href="../../de/d48/structrsock__send__arg.html#a2ebad644b0962dd6eeb6f929ba50fe10">flags</a> = <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a877c38180d23c5447d976c70dda89d69">NUM2INT</a>(<a class="code" href="../../de/d48/structrsock__send__arg.html#a2ebad644b0962dd6eeb6f929ba50fe10">flags</a>);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">for</span> (res = res0; res; res = res-><a class="code" href="../../d6/d9d/structaddrinfo.html#ac8d379469addd7ebbb7cd8f9656268d2">ai_next</a>) {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  retry:</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  arg.<a class="code" href="../../de/d48/structrsock__send__arg.html#acfa7286caec0d37f3cf64ac7fee43b75">to</a> = res-><a class="code" href="../../d6/d9d/structaddrinfo.html#a2a6343a77144ee3079f6e9e0b66c715c">ai_addr</a>;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  arg.<a class="code" href="../../de/d48/structrsock__send__arg.html#a2417368abc9f3f8cb77cca67b902fbf8">tolen</a> = res-><a class="code" href="../../d6/d9d/structaddrinfo.html#a225a0fc5785f7956c4444ef799317994">ai_addrlen</a>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <a class="code" href="../../db/d2e/intern_8h.html#ab9654ba3f4c47d18a77ebc22b5b4c356">rb_thread_fd_writable</a>(arg.<a class="code" href="../../de/d48/structrsock__send__arg.html#aa294a465304806f991d0ebe25c4c4e83">fd</a>);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  n = (int)<a class="code" href="../../dd/d8c/rubysocket_8h.html#ad2ffdd0a11af9427da96f06f96db6e6a">BLOCKING_REGION_FD</a>(<a class="code" href="../../da/dcc/socket_2init_8c.html#a116fedda37b94075c2af3e8f22a39222">rsock_sendto_blocking</a>, &arg);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">if</span> (n >= 0) {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <a class="code" href="../../d5/dab/getaddrinfo_8c.html#a5996eed1e393834ce228347f23443db9">freeaddrinfo</a>(res0);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">return</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#ac55fae7f748afd3fc2533d0d7d06cf5a">INT2FIX</a>(n);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">if</span> (<a class="code" href="../../dc/dac/io_8h.html#af28a170d3ffb07353653f832d95c6ba6">rb_io_wait_writable</a>(fptr-><a class="code" href="../../dd/d7e/structrb__io__t.html#a0d48f8e91d24ff4f382564b30c1b41c2">fd</a>)) {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">goto</span> retry;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  }</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <a class="code" href="../../d5/dab/getaddrinfo_8c.html#a5996eed1e393834ce228347f23443db9">freeaddrinfo</a>(res0);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <a class="code" href="../../db/dcc/error_8c.html#aec0502b6d84cff19bb2071d1386ff177">rb_sys_fail</a>(<span class="stringliteral">"sendto(2)"</span>);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">return</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#ac55fae7f748afd3fc2533d0d7d06cf5a">INT2FIX</a>(n);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment">/*</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment"> * call-seq:</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment"> * udpsocket.recvfrom_nonblock(maxlen) => [mesg, sender_inet_addr]</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment"> * udpsocket.recvfrom_nonblock(maxlen, flags) => [mesg, sender_inet_addr]</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment"> *</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment"> * Receives up to _maxlen_ bytes from +udpsocket+ using recvfrom(2) after</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment"> * O_NONBLOCK is set for the underlying file descriptor.</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment"> * If _maxlen_ is omitted, its default value is 65536.</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment"> * _flags_ is zero or more of the +MSG_+ options.</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment"> * The first element of the results, _mesg_, is the data received.</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment"> * The second element, _sender_inet_addr_, is an array to represent the sender address.</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment"> *</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment"> * When recvfrom(2) returns 0,</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="comment"> * Socket#recvfrom_nonblock returns an empty string as data.</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="comment"> * It means an empty packet.</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment"> *</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment"> * === Parameters</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment"> * * +maxlen+ - the number of bytes to receive from the socket</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="comment"> * * +flags+ - zero or more of the +MSG_+ options</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment"> *</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment"> * === Example</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment"> * require 'socket'</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="comment"> * s1 = UDPSocket.new</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="comment"> * s1.bind("127.0.0.1", 0)</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment"> * s2 = UDPSocket.new</span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment"> * s2.bind("127.0.0.1", 0)</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment"> * s2.connect(*s1.addr.values_at(3,1))</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment"> * s1.connect(*s2.addr.values_at(3,1))</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment"> * s1.send "aaa", 0</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment"> * begin # emulate blocking recvfrom</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment"> * p s2.recvfrom_nonblock(10) #=> ["aaa", ["AF_INET", 33302, "localhost.localdomain", "127.0.0.1"]]</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="comment"> * rescue IO::WaitReadable</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment"> * IO.select([s2])</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment"> * retry</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment"> * end</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment"> *</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="comment"> * Refer to Socket#recvfrom for the exceptions that may be thrown if the call</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="comment"> * to _recvfrom_nonblock_ fails.</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="comment"> *</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="comment"> * UDPSocket#recvfrom_nonblock may raise any error corresponding to recvfrom(2) failure,</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="comment"> * including Errno::EWOULDBLOCK.</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment"> *</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="comment"> * If the exception is Errno::EWOULDBLOCK or Errno::AGAIN,</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="comment"> * it is extended by IO::WaitReadable.</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment"> * So IO::WaitReadable can be used to rescue the exceptions for retrying recvfrom_nonblock.</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment"> *</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment"> * === See</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment"> * * Socket#recvfrom</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="comment"> */</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="keyword">static</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a></div><div class="line"><a name="l00244"></a><span class="lineno"><a class="line" href="../../d1/deb/udpsocket_8c.html#a3e75fbf8d38e2da5ef09bfd1c8c4d23b"> 244</a></span> <a class="code" href="../../d1/deb/udpsocket_8c.html#a3e75fbf8d38e2da5ef09bfd1c8c4d23b">udp_recvfrom_nonblock</a>(<span class="keywordtype">int</span> <a class="code" href="../../df/d77/ruby_8c.html#ad1447518f4372828b8435ae82e48499e">argc</a>, <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> *<a class="code" href="../../df/d77/ruby_8c.html#af2efa898e9eed6fe6715279cb1ec35b0">argv</a>, <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> sock)</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">return</span> <a class="code" href="../../da/dcc/socket_2init_8c.html#a8b56b6d6bb81dd0c8d38944a54b48dd6">rsock_s_recvfrom_nonblock</a>(sock, <a class="code" href="../../df/d77/ruby_8c.html#ad1447518f4372828b8435ae82e48499e">argc</a>, <a class="code" href="../../df/d77/ruby_8c.html#af2efa898e9eed6fe6715279cb1ec35b0">argv</a>, <a class="code" href="../../dd/d8c/rubysocket_8h.html#ac5b3661fbf5b7144395ae396056213b5a2502ed393bd42d9a671c279feb61c4f4">RECV_IP</a>);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="../../d1/deb/udpsocket_8c.html#a03f5d390c888d97a62f9de727fd2e7a0"> 250</a></span> <a class="code" href="../../d1/deb/udpsocket_8c.html#a03f5d390c888d97a62f9de727fd2e7a0">rsock_init_udpsocket</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="comment">/*</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="comment"> * Document-class: UDPSocket < IPSocket</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="comment"> *</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="comment"> * UDPSocket represents a UDP/IP socket.</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="comment"> *</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="comment"> */</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <a class="code" href="../../da/dcc/socket_2init_8c.html#a91ba41a0ff64bbba1965367e6dbd0a69">rb_cUDPSocket</a> = <a class="code" href="../../de/ddf/group__class.html#ga15d068dbe88a3bab3700b03bebb7fbac">rb_define_class</a>(<span class="stringliteral">"UDPSocket"</span>, <a class="code" href="../../da/dcc/socket_2init_8c.html#a4dd0e94e2b1ed007bdf2edda59fedec5">rb_cIPSocket</a>);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <a class="code" href="../../d7/d19/group__defmethod.html#ga118dc7abcdb97f56fe35727ac0ff6eb8">rb_define_method</a>(<a class="code" href="../../da/dcc/socket_2init_8c.html#a91ba41a0ff64bbba1965367e6dbd0a69">rb_cUDPSocket</a>, <span class="stringliteral">"initialize"</span>, <a class="code" href="../../d1/deb/udpsocket_8c.html#a8531bd5f5e43264b43c824182bb3910e">udp_init</a>, -1);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <a class="code" href="../../d7/d19/group__defmethod.html#ga118dc7abcdb97f56fe35727ac0ff6eb8">rb_define_method</a>(<a class="code" href="../../da/dcc/socket_2init_8c.html#a91ba41a0ff64bbba1965367e6dbd0a69">rb_cUDPSocket</a>, <span class="stringliteral">"connect"</span>, <a class="code" href="../../d1/deb/udpsocket_8c.html#a4316787ccc28b31a5d2067e676524d66">udp_connect</a>, 2);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <a class="code" href="../../d7/d19/group__defmethod.html#ga118dc7abcdb97f56fe35727ac0ff6eb8">rb_define_method</a>(<a class="code" href="../../da/dcc/socket_2init_8c.html#a91ba41a0ff64bbba1965367e6dbd0a69">rb_cUDPSocket</a>, <span class="stringliteral">"bind"</span>, <a class="code" href="../../d1/deb/udpsocket_8c.html#a639537d40c6e5c5d44b12bc0e5849fca">udp_bind</a>, 2);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <a class="code" href="../../d7/d19/group__defmethod.html#ga118dc7abcdb97f56fe35727ac0ff6eb8">rb_define_method</a>(<a class="code" href="../../da/dcc/socket_2init_8c.html#a91ba41a0ff64bbba1965367e6dbd0a69">rb_cUDPSocket</a>, <span class="stringliteral">"send"</span>, <a class="code" href="../../d1/deb/udpsocket_8c.html#a5f0dac4c2be47aaf090df4528c7d6aff">udp_send</a>, -1);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <a class="code" href="../../d7/d19/group__defmethod.html#ga118dc7abcdb97f56fe35727ac0ff6eb8">rb_define_method</a>(<a class="code" href="../../da/dcc/socket_2init_8c.html#a91ba41a0ff64bbba1965367e6dbd0a69">rb_cUDPSocket</a>, <span class="stringliteral">"recvfrom_nonblock"</span>, <a class="code" href="../../d1/deb/udpsocket_8c.html#a3e75fbf8d38e2da5ef09bfd1c8c4d23b">udp_recvfrom_nonblock</a>, -1);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> }</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div><div class="ttc" id="udpsocket_8c_html_a5f0dac4c2be47aaf090df4528c7d6aff"><div class="ttname"><a href="../../d1/deb/udpsocket_8c.html#a5f0dac4c2be47aaf090df4528c7d6aff">udp_send</a></div><div class="ttdeci">static VALUE udp_send(int argc, VALUE *argv, VALUE sock)</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/deb/udpsocket_8c_source.html#l00156">udpsocket.c:156</a></div></div> <div class="ttc" id="raddrinfo_8c_html_a10ed0188cfcef5886e9e1706816997e4"><div class="ttname"><a href="../../d3/de8/raddrinfo_8c.html#a10ed0188cfcef5886e9e1706816997e4">rsock_addrinfo</a></div><div class="ttdeci">struct addrinfo * rsock_addrinfo(VALUE host, VALUE port, int socktype, int flags)</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/de8/raddrinfo_8c_source.html#l00379">raddrinfo.c:379</a></div></div> <div class="ttc" id="udpsocket_8c_html_a03f5d390c888d97a62f9de727fd2e7a0"><div class="ttname"><a href="../../d1/deb/udpsocket_8c.html#a03f5d390c888d97a62f9de727fd2e7a0">rsock_init_udpsocket</a></div><div class="ttdeci">void rsock_init_udpsocket(void)</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/deb/udpsocket_8c_source.html#l00250">udpsocket.c:250</a></div></div> <div class="ttc" id="structrsock__send__arg_html_a2417368abc9f3f8cb77cca67b902fbf8"><div class="ttname"><a href="../../de/d48/structrsock__send__arg.html#a2417368abc9f3f8cb77cca67b902fbf8">rsock_send_arg::tolen</a></div><div class="ttdeci">socklen_t tolen</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d8c/rubysocket_8h_source.html#l00251">rubysocket.h:251</a></div></div> <div class="ttc" id="socket_2init_8c_html_a116fedda37b94075c2af3e8f22a39222"><div class="ttname"><a href="../../da/dcc/socket_2init_8c.html#a116fedda37b94075c2af3e8f22a39222">rsock_sendto_blocking</a></div><div class="ttdeci">VALUE rsock_sendto_blocking(void *data)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/dcc/socket_2init_8c_source.html#l00072">init.c:72</a></div></div> <div class="ttc" id="ruby_2ruby_8h_html_a877c38180d23c5447d976c70dda89d69"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#a877c38180d23c5447d976c70dda89d69">NUM2INT</a></div><div class="ttdeci">#define NUM2INT(x)</div><div class="ttdef"><b>Definition:</b> <a href="../../de/de6/ruby_2ruby_8h_source.html#l00536">ruby.h:536</a></div></div> <div class="ttc" id="ruby_2ruby_8h_html_aacea3516b33941ce8149098e223a7466"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#aacea3516b33941ce8149098e223a7466">Qtrue</a></div><div class="ttdeci">#define Qtrue</div><div class="ttdef"><b>Definition:</b> <a href="../../de/de6/ruby_2ruby_8h_source.html#l00366">ruby.h:366</a></div></div> <div class="ttc" id="structrb__io__t_html"><div class="ttname"><a href="../../dd/d7e/structrb__io__t.html">rb_io_t</a></div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dac/io_8h_source.html#l00053">io.h:53</a></div></div> <div class="ttc" id="socket_2init_8c_html_a94cad3a347ec1301613b0d15aaa461ec"><div class="ttname"><a href="../../da/dcc/socket_2init_8c.html#a94cad3a347ec1301613b0d15aaa461ec">rsock_init_sock</a></div><div class="ttdeci">VALUE rsock_init_sock(VALUE sock, int fd)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/dcc/socket_2init_8c_source.html#l00043">init.c:43</a></div></div> <div class="ttc" id="socket_2init_8c_html_a4dd0e94e2b1ed007bdf2edda59fedec5"><div class="ttname"><a href="../../da/dcc/socket_2init_8c.html#a4dd0e94e2b1ed007bdf2edda59fedec5">rb_cIPSocket</a></div><div class="ttdeci">VALUE rb_cIPSocket</div><div class="ttdef"><b>Definition:</b> <a href="../../da/dcc/socket_2init_8c_source.html#l00014">init.c:14</a></div></div> <div class="ttc" id="structrsock__send__arg_html_acfa7286caec0d37f3cf64ac7fee43b75"><div class="ttname"><a href="../../de/d48/structrsock__send__arg.html#acfa7286caec0d37f3cf64ac7fee43b75">rsock_send_arg::to</a></div><div class="ttdeci">struct sockaddr * to</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d8c/rubysocket_8h_source.html#l00250">rubysocket.h:250</a></div></div> <div class="ttc" id="structrsock__send__arg_html_aa4818acf38701fbdac22df9e3868c193"><div class="ttname"><a href="../../de/d48/structrsock__send__arg.html#aa4818acf38701fbdac22df9e3868c193">rsock_send_arg::mesg</a></div><div class="ttdeci">VALUE mesg</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d8c/rubysocket_8h_source.html#l00249">rubysocket.h:249</a></div></div> <div class="ttc" id="structrsock__send__arg_html_aa294a465304806f991d0ebe25c4c4e83"><div class="ttname"><a href="../../de/d48/structrsock__send__arg.html#aa294a465304806f991d0ebe25c4c4e83">rsock_send_arg::fd</a></div><div class="ttdeci">int fd</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d8c/rubysocket_8h_source.html#l00248">rubysocket.h:248</a></div></div> <div class="ttc" id="io_8h_html_aa00f0dca97539a5dd0c4e67ad5be93a3"><div class="ttname"><a href="../../dc/dac/io_8h.html#aa00f0dca97539a5dd0c4e67ad5be93a3">GetOpenFile</a></div><div class="ttdeci">#define GetOpenFile(obj, fp)</div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dac/io_8h_source.html#l00110">io.h:110</a></div></div> <div class="ttc" id="udpsocket_8c_html_a639537d40c6e5c5d44b12bc0e5849fca"><div class="ttname"><a href="../../d1/deb/udpsocket_8c.html#a639537d40c6e5c5d44b12bc0e5849fca">udp_bind</a></div><div class="ttdeci">static VALUE udp_bind(VALUE sock, VALUE host, VALUE port)</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/deb/udpsocket_8c_source.html#l00113">udpsocket.c:113</a></div></div> <div class="ttc" id="udpsocket_8c_html_aeed580ab91df053e63d9a1db3ef6e711"><div class="ttname"><a href="../../d1/deb/udpsocket_8c.html#aeed580ab91df053e63d9a1db3ef6e711">udp_connect_internal</a></div><div class="ttdeci">static VALUE udp_connect_internal(struct udp_arg *arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/deb/udpsocket_8c_source.html#l00052">udpsocket.c:52</a></div></div> <div class="ttc" id="udpsocket_8c_html_a4316787ccc28b31a5d2067e676524d66"><div class="ttname"><a href="../../d1/deb/udpsocket_8c.html#a4316787ccc28b31a5d2067e676524d66">udp_connect</a></div><div class="ttdeci">static VALUE udp_connect(VALUE sock, VALUE host, VALUE port)</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/deb/udpsocket_8c_source.html#l00084">udpsocket.c:84</a></div></div> <div class="ttc" id="basicsocket_8c_html_adbdb4f9137cc082aadcbe62594cc00d8"><div class="ttname"><a href="../../d2/dbf/basicsocket_8c.html#adbdb4f9137cc082aadcbe62594cc00d8">rsock_bsock_send</a></div><div class="ttdeci">VALUE rsock_bsock_send(int argc, VALUE *argv, VALUE sock)</div><div class="ttdef"><b>Definition:</b> <a href="../../d2/dbf/basicsocket_8c_source.html#l00544">basicsocket.c:544</a></div></div> <div class="ttc" id="udpsocket_8c_html_a3e75fbf8d38e2da5ef09bfd1c8c4d23b"><div class="ttname"><a href="../../d1/deb/udpsocket_8c.html#a3e75fbf8d38e2da5ef09bfd1c8c4d23b">udp_recvfrom_nonblock</a></div><div class="ttdeci">static VALUE udp_recvfrom_nonblock(int argc, VALUE *argv, VALUE sock)</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/deb/udpsocket_8c_source.html#l00244">udpsocket.c:244</a></div></div> <div class="ttc" id="intern_8h_html_ab9654ba3f4c47d18a77ebc22b5b4c356"><div class="ttname"><a href="../../db/d2e/intern_8h.html#ab9654ba3f4c47d18a77ebc22b5b4c356">rb_thread_fd_writable</a></div><div class="ttdeci">int rb_thread_fd_writable(int)</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/de7/thread_8c_source.html#l02718">thread.c:2718</a></div></div> <div class="ttc" id="udpsocket_8c_html_a8531bd5f5e43264b43c824182bb3910e"><div class="ttname"><a href="../../d1/deb/udpsocket_8c.html#a8531bd5f5e43264b43c824182bb3910e">udp_init</a></div><div class="ttdeci">static VALUE udp_init(int argc, VALUE *argv, VALUE sock)</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/deb/udpsocket_8c_source.html#l00027">udpsocket.c:27</a></div></div> <div class="ttc" id="structrsock__send__arg_html"><div class="ttname"><a href="../../de/d48/structrsock__send__arg.html">rsock_send_arg</a></div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d8c/rubysocket_8h_source.html#l00247">rubysocket.h:247</a></div></div> <div class="ttc" id="constants_8c_html_a39ff0a7f7690b7524885e5140b588048"><div class="ttname"><a href="../../d4/df3/constants_8c.html#a39ff0a7f7690b7524885e5140b588048">rsock_family_arg</a></div><div class="ttdeci">int rsock_family_arg(VALUE domain)</div><div class="ttdef"><b>Definition:</b> <a href="../../d4/df3/constants_8c_source.html#l00043">constants.c:43</a></div></div> <div class="ttc" id="socket_2init_8c_html_a8bb5397bff51a073e7b6a1696b843a85"><div class="ttname"><a href="../../da/dcc/socket_2init_8c.html#a8bb5397bff51a073e7b6a1696b843a85">rsock_socket</a></div><div class="ttdeci">int rsock_socket(int domain, int type, int proto)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/dcc/socket_2init_8c_source.html#l00243">init.c:243</a></div></div> <div class="ttc" id="group__class_html_ga15d068dbe88a3bab3700b03bebb7fbac"><div class="ttname"><a href="../../de/ddf/group__class.html#ga15d068dbe88a3bab3700b03bebb7fbac">rb_define_class</a></div><div class="ttdeci">VALUE rb_define_class(const char *name, VALUE super)</div><div class="ttdoc">Defines a top-level class. </div><div class="ttdef"><b>Definition:</b> <a href="../../d9/d0c/class_8c_source.html#l00469">class.c:469</a></div></div> <div class="ttc" id="structudp__arg_html_a31b22778dee7c7dfea3809540b5da838"><div class="ttname"><a href="../../d1/db0/structudp__arg.html#a31b22778dee7c7dfea3809540b5da838">udp_arg::res</a></div><div class="ttdeci">struct addrinfo * res</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/deb/udpsocket_8c_source.html#l00047">udpsocket.c:47</a></div></div> <div class="ttc" id="structrb__io__t_html_a0d48f8e91d24ff4f382564b30c1b41c2"><div class="ttname"><a href="../../dd/d7e/structrb__io__t.html#a0d48f8e91d24ff4f382564b30c1b41c2">rb_io_t::fd</a></div><div class="ttdeci">int fd</div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dac/io_8h_source.html#l00054">io.h:54</a></div></div> <div class="ttc" id="io_8h_html_af28a170d3ffb07353653f832d95c6ba6"><div class="ttname"><a href="../../dc/dac/io_8h.html#af28a170d3ffb07353653f832d95c6ba6">rb_io_wait_writable</a></div><div class="ttdeci">int rb_io_wait_writable(int)</div><div class="ttdef"><b>Definition:</b> <a href="../../df/d0a/io_8c_source.html#l00916">io.c:916</a></div></div> <div class="ttc" id="structudp__arg_html"><div class="ttname"><a href="../../d1/db0/structudp__arg.html">udp_arg</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d1/deb/udpsocket_8c_source.html#l00045">udpsocket.c:45</a></div></div> <div class="ttc" id="ruby_8c_html_ad1447518f4372828b8435ae82e48499e"><div class="ttname"><a href="../../df/d77/ruby_8c.html#ad1447518f4372828b8435ae82e48499e">argc</a></div><div class="ttdeci">int argc</div><div class="ttdef"><b>Definition:</b> <a href="../../df/d77/ruby_8c_source.html#l00120">ruby.c:120</a></div></div> <div class="ttc" id="ruby_2ruby_8h_html_aba0717d2689eb68797421a02ab9295c6"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#aba0717d2689eb68797421a02ab9295c6">Qfalse</a></div><div class="ttdeci">#define Qfalse</div><div class="ttdef"><b>Definition:</b> <a href="../../de/de6/ruby_2ruby_8h_source.html#l00365">ruby.h:365</a></div></div> <div class="ttc" id="getaddrinfo_8c_html_a5996eed1e393834ce228347f23443db9"><div class="ttname"><a href="../../d5/dab/getaddrinfo_8c.html#a5996eed1e393834ce228347f23443db9">freeaddrinfo</a></div><div class="ttdeci">void freeaddrinfo(struct addrinfo *ai)</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/dab/getaddrinfo_8c_source.html#l00211">getaddrinfo.c:211</a></div></div> <div class="ttc" id="group__defmethod_html_gaa7bed88640f01bee619f85fda09d28d7"><div class="ttname"><a href="../../d7/d19/group__defmethod.html#gaa7bed88640f01bee619f85fda09d28d7">rb_scan_args</a></div><div class="ttdeci">int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/d0c/class_8c_source.html#l01416">class.c:1416</a></div></div> <div class="ttc" id="ruby_2ruby_8h_html_a3c1d4bfc6a81af60bdcb48744c35f760"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a></div><div class="ttdeci">unsigned long VALUE</div><div class="ttdef"><b>Definition:</b> <a href="../../de/de6/ruby_2ruby_8h_source.html#l00088">ruby.h:88</a></div></div> <div class="ttc" id="eval_8c_html_a8061198378fb16adeb931f90540b2839"><div class="ttname"><a href="../../d3/d57/eval_8c.html#a8061198378fb16adeb931f90540b2839">rb_ensure</a></div><div class="ttdeci">VALUE rb_ensure(VALUE(*b_proc)(ANYARGS), VALUE data1, VALUE(*e_proc)(ANYARGS), VALUE data2)</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/d57/eval_8c_source.html#l00737">eval.c:737</a></div></div> <div class="ttc" id="error_8c_html_aec0502b6d84cff19bb2071d1386ff177"><div class="ttname"><a href="../../db/dcc/error_8c.html#aec0502b6d84cff19bb2071d1386ff177">rb_sys_fail</a></div><div class="ttdeci">void rb_sys_fail(const char *mesg)</div><div class="ttdef"><b>Definition:</b> <a href="../../db/dcc/error_8c_source.html#l01671">error.c:1671</a></div></div> <div class="ttc" id="ruby_2ruby_8h_html_ac55fae7f748afd3fc2533d0d7d06cf5a"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#ac55fae7f748afd3fc2533d0d7d06cf5a">INT2FIX</a></div><div class="ttdeci">#define INT2FIX(i)</div><div class="ttdef"><b>Definition:</b> <a href="../../de/de6/ruby_2ruby_8h_source.html#l00225">ruby.h:225</a></div></div> <div class="ttc" id="rubysocket_8h_html"><div class="ttname"><a href="../../dd/d8c/rubysocket_8h.html">rubysocket.h</a></div></div> <div class="ttc" id="rubysocket_8h_html_ac5b3661fbf5b7144395ae396056213b5a2502ed393bd42d9a671c279feb61c4f4"><div class="ttname"><a href="../../dd/d8c/rubysocket_8h.html#ac5b3661fbf5b7144395ae396056213b5a2502ed393bd42d9a671c279feb61c4f4">RECV_IP</a></div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d8c/rubysocket_8h_source.html#l00260">rubysocket.h:260</a></div></div> <div class="ttc" id="socket_2init_8c_html_ae6a2161106bd94d8cdd216a05fd7226c"><div class="ttname"><a href="../../da/dcc/socket_2init_8c.html#ae6a2161106bd94d8cdd216a05fd7226c">rsock_connect</a></div><div class="ttdeci">int rsock_connect(int fd, const struct sockaddr *sockaddr, int len, int socks)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/dcc/socket_2init_8c_source.html#l00344">init.c:344</a></div></div> <div class="ttc" id="structrsock__send__arg_html_a2ebad644b0962dd6eeb6f929ba50fe10"><div class="ttname"><a href="../../de/d48/structrsock__send__arg.html#a2ebad644b0962dd6eeb6f929ba50fe10">rsock_send_arg::flags</a></div><div class="ttdeci">int flags</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d8c/rubysocket_8h_source.html#l00248">rubysocket.h:248</a></div></div> <div class="ttc" id="structudp__arg_html_a46751423d195b054d224427b379dcbfa"><div class="ttname"><a href="../../d1/db0/structudp__arg.html#a46751423d195b054d224427b379dcbfa">udp_arg::fd</a></div><div class="ttdeci">int fd</div><div class="ttdef"><b>Definition:</b> <a href="../../d1/deb/udpsocket_8c_source.html#l00048">udpsocket.c:48</a></div></div> <div class="ttc" id="structaddrinfo_html_ac8d379469addd7ebbb7cd8f9656268d2"><div class="ttname"><a href="../../d6/d9d/structaddrinfo.html#ac8d379469addd7ebbb7cd8f9656268d2">addrinfo::ai_next</a></div><div class="ttdeci">struct addrinfo * ai_next</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/df7/addrinfo_8h_source.html#l00139">addrinfo.h:139</a></div></div> <div class="ttc" id="ruby_2ruby_8h_html_a98b91af598acb64fe8497413ce498766"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#a98b91af598acb64fe8497413ce498766">rb_secure</a></div><div class="ttdeci">void rb_secure(int)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00079">safe.c:79</a></div></div> <div class="ttc" id="structaddrinfo_html_a225a0fc5785f7956c4444ef799317994"><div class="ttname"><a href="../../d6/d9d/structaddrinfo.html#a225a0fc5785f7956c4444ef799317994">addrinfo::ai_addrlen</a></div><div class="ttdeci">size_t ai_addrlen</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/df7/addrinfo_8h_source.html#l00136">addrinfo.h:136</a></div></div> <div class="ttc" id="structaddrinfo_html"><div class="ttname"><a href="../../d6/d9d/structaddrinfo.html">addrinfo</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d5/df7/addrinfo_8h_source.html#l00131">addrinfo.h:131</a></div></div> <div class="ttc" id="socket_2init_8c_html_a8b56b6d6bb81dd0c8d38944a54b48dd6"><div class="ttname"><a href="../../da/dcc/socket_2init_8c.html#a8b56b6d6bb81dd0c8d38944a54b48dd6">rsock_s_recvfrom_nonblock</a></div><div class="ttdeci">VALUE rsock_s_recvfrom_nonblock(VALUE sock, int argc, VALUE *argv, enum sock_recv_type from)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/dcc/socket_2init_8c_source.html#l00173">init.c:173</a></div></div> <div class="ttc" id="group__defmethod_html_ga118dc7abcdb97f56fe35727ac0ff6eb8"><div class="ttname"><a href="../../d7/d19/group__defmethod.html#ga118dc7abcdb97f56fe35727ac0ff6eb8">rb_define_method</a></div><div class="ttdeci">void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)</div><div class="ttdef"><b>Definition:</b> <a href="../../d9/d0c/class_8c_source.html#l01210">class.c:1210</a></div></div> <div class="ttc" id="structaddrinfo_html_a2a6343a77144ee3079f6e9e0b66c715c"><div class="ttname"><a href="../../d6/d9d/structaddrinfo.html#a2a6343a77144ee3079f6e9e0b66c715c">addrinfo::ai_addr</a></div><div class="ttdeci">struct sockaddr * ai_addr</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/df7/addrinfo_8h_source.html#l00138">addrinfo.h:138</a></div></div> <div class="ttc" id="rubysocket_8h_html_ad2ffdd0a11af9427da96f06f96db6e6a"><div class="ttname"><a href="../../dd/d8c/rubysocket_8h.html#ad2ffdd0a11af9427da96f06f96db6e6a">BLOCKING_REGION_FD</a></div><div class="ttdeci">#define BLOCKING_REGION_FD(func, arg)</div><div class="ttdef"><b>Definition:</b> <a href="../../dd/d8c/rubysocket_8h_source.html#l00201">rubysocket.h:201</a></div></div> <div class="ttc" id="ruby_8c_html_af2efa898e9eed6fe6715279cb1ec35b0"><div class="ttname"><a href="../../df/d77/ruby_8c.html#af2efa898e9eed6fe6715279cb1ec35b0">argv</a></div><div class="ttdeci">char ** argv</div><div class="ttdef"><b>Definition:</b> <a href="../../df/d77/ruby_8c_source.html#l00121">ruby.c:121</a></div></div> <div class="ttc" id="ruby_2ruby_8h_html_a0e80f207eb41e9010ec9f0f5f9419fea"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#a0e80f207eb41e9010ec9f0f5f9419fea">StringValue</a></div><div class="ttdeci">#define StringValue(v)</div><div class="ttdef"><b>Definition:</b> <a href="../../de/de6/ruby_2ruby_8h_source.html#l00466">ruby.h:466</a></div></div> <div class="ttc" id="socket_2init_8c_html_a91ba41a0ff64bbba1965367e6dbd0a69"><div class="ttname"><a href="../../da/dcc/socket_2init_8c.html#a91ba41a0ff64bbba1965367e6dbd0a69">rb_cUDPSocket</a></div><div class="ttdeci">VALUE rb_cUDPSocket</div><div class="ttdef"><b>Definition:</b> <a href="../../da/dcc/socket_2init_8c_source.html#l00017">init.c:17</a></div></div> <div class="ttc" id="udpsocket_8c_html_a40ad604cdd6ee17b28e242b226998e35"><div class="ttname"><a href="../../d1/deb/udpsocket_8c.html#a40ad604cdd6ee17b28e242b226998e35">rsock_freeaddrinfo</a></div><div class="ttdeci">VALUE rsock_freeaddrinfo(struct addrinfo *addr)</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/de8/raddrinfo_8c_source.html#l00525">raddrinfo.c:525</a></div></div> </div><!-- fragment --></div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="../../doxygen.png" alt="doxygen"/> </a> 1.8.14 </small></address> </body> </html>
💾 Save Changes
❌ Cancel