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

Function AddSockAuxData

library/cpp/netliba/socket/creators.cpp:34–89  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

32 }
33
34 TMsgHdr* AddSockAuxData(TMsgHdr* header, const ui8 tos, const sockaddr_in6& myAddr, void* buffer, size_t bufferSize) {
35#ifdef _win_
36 Y_UNUSED(header);
37 Y_UNUSED(tos);
38 Y_UNUSED(myAddr);
39 Y_UNUSED(buffer);
40 Y_UNUSED(bufferSize);
41 return nullptr;
42#else
43 header->msg_control = buffer;
44 header->msg_controllen = bufferSize;
45
46 size_t totalLen = 0;
47#ifdef _cygwin_
48 Y_UNUSED(tos);
49#else
50 // Cygwin does not support IPV6_TCLASS, so we ignore it
51 cmsghdr* cmsgTos = CMSG_FIRSTHDR(header);
52 if (cmsgTos == nullptr) {
53 header->msg_control = nullptr;
54 header->msg_controllen = 0;
55 return nullptr;
56 }
57 cmsgTos->cmsg_level = IPPROTO_IPV6;
58 cmsgTos->cmsg_type = IPV6_TCLASS;
59 cmsgTos->cmsg_len = CMSG_LEN(sizeof(int));
60 totalLen = CMSG_SPACE(sizeof(int));
61 *(ui8*)CMSG_DATA(cmsgTos) = tos;
62#endif
63
64 if (((ui64*)myAddr.sin6_addr.s6_addr)[0] != 0u || ((ui64*)myAddr.sin6_addr.s6_addr)[1] != 0u) {
65 in6_pktinfo* pktInfo;
66#ifdef _cygwin_
67 cmsghdr* cmsgAddr = CMSG_FIRSTHDR(header);
68#else
69 cmsghdr* cmsgAddr = CMSG_NXTHDR(header, cmsgTos);
70#endif
71 if (cmsgAddr == nullptr) {
72 // leave only previous record
73 header->msg_controllen = totalLen;
74 return nullptr;
75 }
76 cmsgAddr->cmsg_level = IPPROTO_IPV6;
77 cmsgAddr->cmsg_type = IPV6_PKTINFO;
78 cmsgAddr->cmsg_len = CMSG_LEN(sizeof(*pktInfo));
79 totalLen += CMSG_SPACE(sizeof(*pktInfo));
80 pktInfo = (in6_pktinfo*)CMSG_DATA(cmsgAddr);
81
82 pktInfo->ipi6_addr = myAddr.sin6_addr;
83 pktInfo->ipi6_ifindex = 0; /* 0 = use interface specified in routing table */
84 }
85 header->msg_controllen = totalLen; //write right len
86
87 return header;
88#endif
89 }
90
91 TIoVec CreateIoVec(char* data, const size_t dataSize) {

Callers 1

CreateNl12SendMsgHdrFunction · 0.85

Calls 1

Y_UNUSEDFunction · 0.85

Tested by

no test coverage detected