<div dir="ltr"><p dir="ltr"><br>
29.07.2015 23:49 Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ель &quot;Pavel Emelyanov&quot; &lt;<a href="mailto:xemul@parallels.com" target="_blank">xemul@parallels.com</a>&gt; Ð½Ð°Ð¿Ð¸ÑÐ°Ð»:<br>
&gt;<br>
&gt; On 07/29/2015 11:24 PM, Andrey Vagin wrote:<br>
&gt;<br>
&gt; Does it pass?</p><p>No, it doesn&#39;t. We don&#39;t restore data in a socket.</p><p dir="ltr">
&gt;<br>
&gt; &gt; v2: add SOCK_NONBLOCK<br>
&gt; &gt; Signed-off-by: Andrey Vagin &lt;<a href="mailto:avagin@openvz.org" target="_blank">avagin@openvz.org</a>&gt;<br>
&gt; &gt; ---<br>
&gt; &gt;  test/zdtm.sh  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  |  1 +<br>
&gt; &gt;  test/zdtm/live/static/Makefile  Â  Â  Â  Â  Â  |  1 +<br>
&gt; &gt;  test/zdtm/live/static/socket_close_data.c | 43 +++++++++++++++++++++++++++++++<br>
&gt; &gt;  3 files changed, 45 insertions(+)<br>
&gt; &gt;  create mode 100644 test/zdtm/live/static/socket_close_data.c<br>
&gt; &gt;<br>
&gt; &gt; diff --git a/test/zdtm.sh b/test/zdtm.sh<br>
&gt; &gt; index e7c0e6f..6666ac9 100755<br>
&gt; &gt; --- a/test/zdtm.sh<br>
&gt; &gt; +++ b/test/zdtm.sh<br>
&gt; &gt; @@ -86,6 +86,7 @@ generate_test_list()<br>
&gt; &gt;  Â  Â  Â  Â  Â  Â  Â static/sock_filter<br>
&gt; &gt;  Â  Â  Â  Â  Â  Â  Â static/socket6_udp<br>
&gt; &gt;  Â  Â  Â  Â  Â  Â  Â static/socket_udplite<br>
&gt; &gt; +  Â  Â  Â  Â  Â  Â static/socket_close_data<br>
&gt; &gt;  Â  Â  Â  Â  Â  Â  Â static/selfexe00<br>
&gt; &gt;  Â  Â  Â  Â  Â  Â  Â static/link10<br>
&gt; &gt;  Â  Â  Â  Â  Â  Â  Â static/unlink_fstat00<br>
&gt; &gt; diff --git a/test/zdtm/live/static/Makefile b/test/zdtm/live/static/Makefile<br>
&gt; &gt; index 8e98ac8..b901296 100644<br>
&gt; &gt; --- a/test/zdtm/live/static/Makefile<br>
&gt; &gt; +++ b/test/zdtm/live/static/Makefile<br>
&gt; &gt; @@ -33,6 +33,7 @@ TST_NOFILE  =  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â \<br>
&gt; &gt;  Â  Â  Â  Â  Â  Â  Â socket6_udp  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â \<br>
&gt; &gt;  Â  Â  Â  Â  Â  Â  Â socket_udplite  Â  Â  Â  Â  Â  Â  Â  Â  \<br>
&gt; &gt;  Â  Â  Â  Â  Â  Â  Â socket_aio  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  \<br>
&gt; &gt; +  Â  Â  Â  Â  Â  Â socket_close_data  Â  Â  Â  Â  Â  Â  Â \<br>
&gt; &gt;  Â  Â  Â  Â  Â  Â  Â packet_sock  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â \<br>
&gt; &gt;  Â  Â  Â  Â  Â  Â  Â packet_sock_mmap  Â  Â  Â  Â  Â  Â  Â  \<br>
&gt; &gt;  Â  Â  Â  Â  Â  Â  Â sock_filter  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â \<br>
&gt; &gt; diff --git a/test/zdtm/live/static/socket_close_data.c b/test/zdtm/live/static/socket_close_data.c<br>
&gt; &gt; new file mode 100644<br>
&gt; &gt; index 0000000..a23eff6<br>
&gt; &gt; --- /dev/null<br>
&gt; &gt; +++ b/test/zdtm/live/static/socket_close_data.c<br>
&gt; &gt; @@ -0,0 +1,43 @@<br>
&gt; &gt; +#include &lt;errno.h&gt;<br>
&gt; &gt; +#include &lt;stdlib.h&gt;<br>
&gt; &gt; +#include &lt;string.h&gt;<br>
&gt; &gt; +#include &lt;sys/types.h&gt;<br>
&gt; &gt; +#include &lt;sys/socket.h&gt;<br>
&gt; &gt; +<br>
&gt; &gt; +#include &quot;zdtmtst.h&quot;<br>
&gt; &gt; +<br>
&gt; &gt; +const char *test_doc = &quot;Check one end of socketpair with data&quot;;<br>
&gt; &gt; +const char *test_author  Â  Â  = &quot;Andrew Vagin &lt;<a href="mailto:avagin@openvz.org" target="_blank">avagin@openvz.org</a>&quot;;<br>
&gt; &gt; +<br>
&gt; &gt; +#define MSG &quot;hello&quot;<br>
&gt; &gt; +int main(int argc, char **argv)<br>
&gt; &gt; +{<br>
&gt; &gt; +  Â  Â int sks[2], ret;<br>
&gt; &gt; +  Â  Â char buf[1024];<br>
&gt; &gt; +<br>
&gt; &gt; +  Â  Â test_init(argc, argv);<br>
&gt; &gt; +<br>
&gt; &gt; +  Â  Â if (socketpair(PF_UNIX, SOCK_DGRAM | SOCK_NONBLOCK, 0, sks) &lt; 0) {<br>
&gt; &gt; +  Â  Â  Â  Â  Â  Â err(&quot;socketpair&quot;);<br>
&gt; &gt; +  Â  Â  Â  Â  Â  Â return 1;<br>
&gt; &gt; +  Â  Â }<br>
&gt; &gt; +<br>
&gt; &gt; +  Â  Â if (write(sks[1], MSG, sizeof(MSG)) != sizeof(MSG)) {<br>
&gt; &gt; +  Â  Â  Â  Â  Â  Â err(&quot;write&quot;);<br>
&gt; &gt; +  Â  Â  Â  Â  Â  Â return 1;<br>
&gt; &gt; +  Â  Â }<br>
&gt; &gt; +  Â  Â close(sks[1]);<br>
&gt; &gt; +<br>
&gt; &gt; +  Â  Â test_daemon();<br>
&gt; &gt; +  Â  Â test_waitsig();<br>
&gt; &gt; +<br>
&gt; &gt; +  Â  Â ret = read(sks[0], buf, sizeof(MSG));<br>
&gt; &gt; +  Â  Â buf[ret &gt; 0 ? ret : 0] = 0;<br>
&gt; &gt; +  Â  Â if (ret != sizeof(MSG)) {<br>
&gt; &gt; +  Â  Â  Â  Â  Â  Â fail(&quot;%d: %s&quot;, ret, buf);<br>
&gt; &gt; +  Â  Â  Â  Â  Â  Â return 1;<br>
&gt; &gt; +  Â  Â }<br>
&gt; &gt; +<br>
&gt; &gt; +  Â  Â pass();<br>
&gt; &gt; +  Â  Â return 0;<br>
&gt; &gt; +}<br>
&gt; &gt;<br>
&gt;<br>
</p>
</div>