OK; we've been using UDTv4 implementation for quite some time now, still to our surprise we ran into some issues when trying to tweak the performance. We've been using UDT in data-gram mode.
To our surprise, the recvmsg function waits for the entire period of UDT_RCVTIMEO even if there are tons of messages already in the buffer.. is it by design? It's very easy to reproduce (..) just set timeout to say 15000 ms (..) send a few messages 40 bytes each (..) and see the socket blocking for minutes.
That results in extremely undesired scenarios (..) we've been seeing the receiving socket seemingly 'receiving' data long long after... the sending node... went offline. As perceived by the upper layers of the software. I mean come on, the variable is called a timeout.. not a polling time or whatever.
So if we set UDT_RCVTIMEO to a small value say 100ms .. is it just the polling time for results and would big messages be retrieved in any case? or is it the time after an entire datagram was not retrieved then the function returns an error?
OK; we've been using UDTv4 implementation for quite some time now, still to our surprise we ran into some issues when trying to tweak the performance. We've been using UDT in data-gram mode.
To our surprise, the recvmsg function waits for the entire period of UDT_RCVTIMEO even if there are tons of messages already in the buffer.. is it by design? It's very easy to reproduce (..) just set timeout to say 15000 ms (..) send a few messages 40 bytes each (..) and see the socket blocking for minutes.
That results in extremely undesired scenarios (..) we've been seeing the receiving socket seemingly 'receiving' data long long after... the sending node... went offline. As perceived by the upper layers of the software. I mean come on, the variable is called a timeout.. not a polling time or whatever.
So if we set UDT_RCVTIMEO to a small value say 100ms .. is it just the polling time for results and would big messages be retrieved in any case? or is it the time after an entire datagram was not retrieved then the function returns an error?