MCPcopy Create free account
hub / github.com/Panzerschrek/Chasm-Reverse / ReadUnrealiableData

Method ReadUnrealiableData

PanzerChasm/net/net.cpp:226–273  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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 {

Callers

nothing calls this directly

Calls 1

IsSocketReadyFunction · 0.85

Tested by

no test coverage detected