do not busy loop while sending

This commit is contained in:
Benjamin Sergeant 2019-03-14 14:37:43 -07:00
parent e158175819
commit a5179cd17f
3 changed files with 62 additions and 3 deletions

View File

@ -198,6 +198,12 @@ namespace ix
while (!isSendBufferEmpty() && !_requestInitCancellation)
{
sendOnSocket();
// Sleep 10ms between each send so that we dont busy loop
// A better strategy would be to select on the socket to
// check whether we can write to it without blocking
std::chrono::duration<double, std::micro> duration(10);
std::this_thread::sleep_for(duration);
}
}
else if (pollResult == PollResultType_ReadyForRead)

View File

@ -6,10 +6,10 @@ osName = platform.system()
print('os name = {}'.format(osName))
root = os.path.dirname(os.path.realpath(__file__))
buildDir = os.path.join(root, 'build')
buildDir = os.path.join(root, 'build', osName)
if not os.path.exists(buildDir):
os.mkdir(buildDir)
os.makedirs(buildDir)
os.chdir(buildDir)
@ -38,7 +38,7 @@ sanitizerFlags = sanitizersFlags[sanitizer]
# os.environ['CC'] = 'clang-cl'
# os.environ['CXX'] = 'clang-cl'
cmakeCmd = 'cmake -DCMAKE_BUILD_TYPE=Debug {} {} ..'.format(generator, sanitizerFlags)
cmakeCmd = 'cmake -DCMAKE_BUILD_TYPE=Debug {} {} ../..'.format(generator, sanitizerFlags)
print(cmakeCmd)
ret = os.system(cmakeCmd)
assert ret == 0, 'CMake failed, exiting'
@ -67,6 +67,7 @@ def findFiles(prefix):
# We need to copy the zlib DLL in the current work directory
shutil.copy(os.path.join(
'..',
'..',
'..',
'third_party',

52
ws/test_ws.sh Normal file
View File

@ -0,0 +1,52 @@
#!/bin/sh
rm -rf /tmp/ws_test
mkdir -p /tmp/ws_test
# Start a transport server
cd /tmp/ws_test
ws transfer --port 8090 --pidfile /tmp/ws_test/pidfile &
# Wait until the transfer server is up
while true
do
nc -zv 127.0.0.1 8090 && {
echo "Transfer server up and running"
break
}
echo "sleep ..."
sleep 0.1
done
# Start a receiver
mkdir -p /tmp/ws_test/receive
cd /tmp/ws_test/receive
ws receive ws://127.0.0.1:8090 &
mkdir /tmp/ws_test/send
cd /tmp/ws_test/send
# mkfile 10m 10M_file
dd if=/dev/urandom of=10M_file count=10000 bs=1024
# Start the sender job
ws send ws://127.0.0.1:8090 10M_file
# Wait until the file has been written to disk
while true
do
if test -f /tmp/ws_test/receive/10M_file ; then
echo "Received file does exists, exiting loop"
break
fi
echo "sleep ..."
sleep 0.1
done
cksum /tmp/ws_test/send/10M_file
cksum /tmp/ws_test/receive/10M_file
# Give some time to ws receive to terminate
sleep 2
# Cleanup
kill `cat /tmp/ws_test/pidfile`