Commit 6f971c1a authored by Andrei Vagin's avatar Andrei Vagin Committed by Pavel Emelyanov

zdtm: fix a race in socket_udp and socket_udplite

If we have two sockets and send an upd message from one to another,
we can't be sure that it will be delivered immediately,
there is a change to get from recv(..., MSG_DONTWAIT) EGAIN.

This message is handled asynchronously in a kernel space, so
there may be a small timeout before we get it from another socket.

v2: fix socket6_udp too

Reported-by: Mr Travis
Signed-off-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
parent fe68441b
...@@ -85,7 +85,7 @@ int main(int argc, char **argv) ...@@ -85,7 +85,7 @@ int main(int argc, char **argv)
return 1; return 1;
} }
ret = recvfrom(sk1, buf, sizeof(buf), MSG_DONTWAIT, ret = recvfrom(sk1, buf, sizeof(buf), 0,
(struct sockaddr *)&addr, &len); (struct sockaddr *)&addr, &len);
if (ret <= 0) { if (ret <= 0) {
fail("Can't recv C"); fail("Can't recv C");
...@@ -102,7 +102,7 @@ int main(int argc, char **argv) ...@@ -102,7 +102,7 @@ int main(int argc, char **argv)
return 1; return 1;
} }
ret = recvfrom(sk2, buf, sizeof(buf), MSG_DONTWAIT, ret = recvfrom(sk2, buf, sizeof(buf), 0,
(struct sockaddr *)&addr, &len); (struct sockaddr *)&addr, &len);
if (ret <= 0) { if (ret <= 0) {
fail("Can't recv"); fail("Can't recv");
......
...@@ -90,7 +90,7 @@ int main(int argc, char **argv) ...@@ -90,7 +90,7 @@ int main(int argc, char **argv)
return 1; return 1;
} }
ret = recvfrom(sk1, buf, sizeof(buf), MSG_DONTWAIT, ret = recvfrom(sk1, buf, sizeof(buf), 0,
(struct sockaddr *)&addr, &len); (struct sockaddr *)&addr, &len);
if (ret <= 0) { if (ret <= 0) {
fail("Can't recv C"); fail("Can't recv C");
...@@ -107,7 +107,7 @@ int main(int argc, char **argv) ...@@ -107,7 +107,7 @@ int main(int argc, char **argv)
return 1; return 1;
} }
ret = recvfrom(sk2, buf, sizeof(buf), MSG_DONTWAIT, ret = recvfrom(sk2, buf, sizeof(buf), 0,
(struct sockaddr *)&addr, &len); (struct sockaddr *)&addr, &len);
if (ret <= 0) { if (ret <= 0) {
fail("Can't recv"); fail("Can't recv");
......
...@@ -90,7 +90,7 @@ int main(int argc, char **argv) ...@@ -90,7 +90,7 @@ int main(int argc, char **argv)
return 1; return 1;
} }
ret = recvfrom(sk1, buf, sizeof(buf), MSG_DONTWAIT, ret = recvfrom(sk1, buf, sizeof(buf), 0,
(struct sockaddr *)&addr, &len); (struct sockaddr *)&addr, &len);
if (ret <= 0) { if (ret <= 0) {
fail("Can't recv C"); fail("Can't recv C");
...@@ -107,7 +107,7 @@ int main(int argc, char **argv) ...@@ -107,7 +107,7 @@ int main(int argc, char **argv)
return 1; return 1;
} }
ret = recvfrom(sk2, buf, sizeof(buf), MSG_DONTWAIT, ret = recvfrom(sk2, buf, sizeof(buf), 0,
(struct sockaddr *)&addr, &len); (struct sockaddr *)&addr, &len);
if (ret <= 0) { if (ret <= 0) {
fail("Can't recv"); fail("Can't recv");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment