| 224 | } |
| 225 | |
| 226 | virtual unsigned int ReadUnrealiableData( void* out_data, unsigned int buffer_size ) override |
| 227 | { |
| 228 | if( disconnected_ ) return 0u; |
| 229 | |
| 230 | if( IsSocketReady( udp_socket_ ) ) |
| 231 | { |
| 232 | #ifdef _WIN32 |
| 233 | sockaddr_in reciever_address; |
| 234 | int reciever_address_length= sizeof(reciever_address); |
| 235 | int result= |
| 236 | ::recvfrom( udp_socket_, (char*) out_data, buffer_size, 0, (sockaddr*) &reciever_address, &reciever_address_length ); |
| 237 | |
| 238 | if( result == SOCKET_ERROR ) |
| 239 | { |
| 240 | Log::Warning( FUNC_NAME, " error: ", ::WSAGetLastError() ); |
| 241 | return 0u; |
| 242 | } |
| 243 | |
| 244 | if( !( // Check for correct addres - discard messages from invalid address. |
| 245 | reciever_address.sin_addr.S_un.S_addr == destination_udp_address_.sin_addr.S_un.S_addr && |
| 246 | reciever_address.sin_port == destination_udp_address_.sin_port ) ) |
| 247 | { |
| 248 | return 0u; |
| 249 | } |
| 250 | #else |
| 251 | sockaddr_in reciever_address; |
| 252 | socklen_t reciever_address_length= sizeof(reciever_address); |
| 253 | int result= |
| 254 | ::recvfrom( udp_socket_, (char*) out_data, buffer_size, 0, (sockaddr*) &reciever_address, &reciever_address_length ); |
| 255 | |
| 256 | if( result == -1 ) |
| 257 | { |
| 258 | Log::Warning( FUNC_NAME, " error: ", errno ); |
| 259 | return 0u; |
| 260 | } |
| 261 | |
| 262 | if( !( // Check for correct addres - discard messages from invalid address. |
| 263 | reciever_address.sin_addr.s_addr == destination_udp_address_.sin_addr.s_addr && |
| 264 | reciever_address.sin_port == destination_udp_address_.sin_port ) ) |
| 265 | { |
| 266 | return 0u; |
| 267 | } |
| 268 | #endif |
| 269 | |
| 270 | return std::max( result, 0 ); |
| 271 | } |
| 272 | return 0; |
| 273 | } |
| 274 | |
| 275 | virtual void Disconnect() override |
| 276 | { |
nothing calls this directly
no test coverage detected