I am sending messages to a remote server using a simple TCP socket lock, and the problem I have is that for each message it takes a completely different time to send.
And here is what I will get (example):
Bytes Sent: 217, Time: 34.3336 usec Bytes Sent: 217, Time: 9.9107 usec Bytes Sent: 226, Time: 20.1754 usec Bytes Sent: 226, Time: 38.2271 usec Bytes Sent: 217, Time: 33.6257 usec Bytes Sent: 217, Time: 12.7424 usec Bytes Sent: 217, Time: 21.5912 usec Bytes Sent: 217, Time: 31.1480 usec Bytes Sent: 218, Time: 28.3164 usec Bytes Sent: 218, Time: 13.0963 usec Bytes Sent: 218, Time: 82.8254 usec Bytes Sent: 218, Time: 13.0963 usec Bytes Sent: 227, Time: 30.7941 usec Bytes Sent: 218, Time: 27.9624 usec Bytes Sent: 216, Time: 2.1237 usec Bytes Sent: 218, Time: 12.3884 usec Bytes Sent: 227, Time: 31.1480 usec Bytes Sent: 227, Time: 88.4887 usec Bytes Sent: 218, Time: 93.0901 usec Bytes Sent: 218, Time: 7.7870 usec Bytes Sent: 218, Time: 28.3164 usec Bytes Sent: 227, Time: 89.5505 usec Bytes Sent: 218, Time: 84.2412 usec Bytes Sent: 218, Time: 13.8042 usec Bytes Sent: 227, Time: 99.4612 usec Bytes Sent: 218, Time: 86.0110 usec Bytes Sent: 218, Time: 12.3884 usec Bytes Sent: 218, Time: 87.7807 usec Bytes Sent: 216, Time: 3.5395 usec Bytes Sent: 218, Time: 4.6014 usec Bytes Sent: 218, Time: 36.1034 usec Bytes Sent: 218, Time: 14.8661 usec Bytes Sent: 218, Time: 24.0689 usec Bytes Sent: 218, Time: 18.0517 usec Bytes Sent: 227, Time: 24.4229 usec
Does anyone know why this could happen? Why does one use 3 usec for sending and 80 usec for the other?
And is there a way to fix this?
Note. The main goal I want to archive is to send each message as quickly as possible. I don't need any additional sockets, at least as long as they work faster.
Some additional information about what I am doing:
C ++, Visual Studio 2013
How do I discover:
... hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; ... ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol); ...
How to send and calculate the time:
... LARGE_INTEGER cT; QueryPerformanceCounter(&cT); long long dT = cT.QuadPart; iBytesSent = send(ConnectSocket, msgFinal, msgFinalLen, 0); QueryPerformanceCounter(&cT); dT = cT.QuadPart - dT; ...
I am also listening to this socket from another thread, I do not know if this can affect the send or not:
iResult = recv(ConnectSocket, recvbuf, DEFAULT_BUFLEN, 0);