MCPcopy Create free account
hub / github.com/catboost/catboost / SendTo

Method SendTo

library/cpp/netliba/v6/udp_socket.cpp:138–166  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

136 }
137
138 TNetSocket::ESendError TNetSocket::SendTo(const char* buf, int size, const sockaddr_in6& toAddress, const EFragFlag frag) const {
139 Y_ASSERT(size >= UDP_LOW_LEVEL_HEADER_SIZE);
140 ui32 crc = CalcChecksum(buf + UDP_LOW_LEVEL_HEADER_SIZE, size - UDP_LOW_LEVEL_HEADER_SIZE);
141 ui32 ipCrc = CalcAddressCrc(toAddress);
142 ui32 portCrc = toAddress.sin6_port;
143 *(ui32*)buf = crc + ipCrc + portCrc;
144#ifdef SIMULATE_NETWORK_FAILURES
145 if ((RandomNumber<size_t>() % 3) == 0)
146 return true; // packet lost
147 if ((RandomNumber<size_t>() % 3) == 0)
148 (char&)(buf[RandomNumber<size_t>() % size]) += RandomNumber<size_t>(); // packet broken
149#endif
150
151 char tosBuffer[NNetlibaSocket::TOS_BUFFER_SIZE];
152 void* t = NNetlibaSocket::CreateTos(Tos, tosBuffer);
153 const NNetlibaSocket::TIoVec iov = NNetlibaSocket::CreateIoVec((char*)buf, size);
154 NNetlibaSocket::TMsgHdr hdr = NNetlibaSocket::CreateSendMsgHdr(toAddress, iov, t);
155
156 const int rv = s->SendMsg(&hdr, 0, frag);
157 if (rv < 0) {
158 if (errno == EHOSTUNREACH || errno == ENETUNREACH) {
159 return SEND_NO_ROUTE_TO_HOST;
160 } else {
161 return SEND_BUFFER_OVERFLOW;
162 }
163 }
164 Y_ASSERT(rv == size);
165 return SEND_OK;
166 }
167
168 inline bool CrcMatches(ui32 pktCrc, ui32 crc, const sockaddr_in6& addr) {
169 Y_ASSERT(LocalHostFound);

Callers 11

RequireResendFunction · 0.45
RequireResendNoShmemFunction · 0.45
AckCompleteFunction · 0.45
SendPingFunction · 0.45
SendFakePingFunction · 0.45
SendDataMethod · 0.45
RecvCycleMethod · 0.45
StepMethod · 0.45
SendKillFunction · 0.45
RespondMethod · 0.45
RequestMethod · 0.45

Calls 6

CalcAddressCrcFunction · 0.85
CreateTosFunction · 0.85
CreateIoVecFunction · 0.85
CreateSendMsgHdrFunction · 0.85
SendMsgMethod · 0.80
CalcChecksumFunction · 0.70

Tested by 2

RespondMethod · 0.36
RequestMethod · 0.36