MCPcopy Create free account
hub / github.com/caozhiyi/CppNet / _ReadFunction

Method _ReadFunction

net/CppNetImpl.cpp:295–367  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

293}
294
295void CCppNetImpl::_ReadFunction(base::CMemSharePtr<CEventHandler>& event, uint32_t err) {
296 if (!event) {
297 base::LOG_WARN("event is null while read.");
298 return;
299 }
300 auto socket_ptr = event->_client_socket.Lock();
301 uint64_t handle = socket_ptr->GetSocket();
302 if (err & EVENT_CONNECT) {
303 // remote refuse connect
304 if (err & ERR_CONNECT_FAILED || err & ERR_CONNECT_CLOSE) {
305 err = CEC_CONNECT_REFUSE;
306
307 } else {
308 err = CEC_SUCCESS;
309
310 }
311 if (_connection_call_back) {
312 _connection_call_back(socket_ptr->_upper_sock, err);
313 }
314
315 // start read
316 if (err == CEC_SUCCESS) {
317 socket_ptr->SyncRead();
318
319 } else {
320 std::unique_lock<std::mutex> lock(_mutex);
321 _socket_map.erase(socket_ptr->GetSocket());
322 }
323
324 } else if (err & EVENT_DISCONNECT) {
325 if (err & ERR_CONNECT_CLOSE) {
326 err = CEC_SUCCESS;
327 if (_disconnection_call_back) {
328 _disconnection_call_back(socket_ptr->_upper_sock, err);
329 }
330 std::unique_lock<std::mutex> lock(_mutex);
331 _socket_map.erase(socket_ptr->GetSocket());
332 }
333
334 } else if (err & EVENT_READ) {
335 if (err & ERR_CONNECT_CLOSE) {
336 err = CEC_CLOSED;
337
338 } else if (err & ERR_CONNECT_BREAK) {
339 err = CEC_CONNECT_BREAK;
340
341 } else if (err & ERR_TIME_OUT) {
342 err = CEC_TIMEOUT;
343
344 } else {
345 err = CEC_SUCCESS;
346 }
347
348 // call read back function
349 if (_read_call_back) {
350 _read_call_back(socket_ptr->_upper_sock, socket_ptr->_read_event->_buffer.Get(), socket_ptr->_read_event->_off_set, err);
351 }
352

Callers 5

SyncReadMethod · 0.80
SyncWriteMethod · 0.80
RecvMethod · 0.80
_AcceptMethod · 0.80
RecvMethod · 0.80

Calls 5

LockMethod · 0.80
GetMethod · 0.80
GetSocketMethod · 0.45
SyncReadMethod · 0.45
SyncDisconnectionMethod · 0.45

Tested by

no test coverage detected