MCPcopy Create free account
hub / github.com/cppla/ServerStatus / net_udp_send

Function net_udp_send

server/src/system.c:969–1035  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

967}
968
969int net_udp_send(NETSOCKET sock, const NETADDR *addr, const void *data, int size)
970{
971 int d = -1;
972
973 if(addr->type&NETTYPE_IPV4)
974 {
975 if(sock.ipv4sock >= 0)
976 {
977 struct sockaddr_in sa;
978 if(addr->type&NETTYPE_LINK_BROADCAST)
979 {
980 mem_zero(&sa, sizeof(sa));
981 sa.sin_port = htons(addr->port);
982 sa.sin_family = AF_INET;
983 sa.sin_addr.s_addr = INADDR_BROADCAST;
984 }
985 else
986 netaddr_to_sockaddr_in(addr, &sa);
987
988 d = sendto((int)sock.ipv4sock, (const char*)data, size, 0, (struct sockaddr *)&sa, sizeof(sa));
989 }
990 else
991 dbg_msg("net", "can't sent ipv4 traffic to this socket");
992 }
993
994 if(addr->type&NETTYPE_IPV6)
995 {
996 if(sock.ipv6sock >= 0)
997 {
998 struct sockaddr_in6 sa;
999 if(addr->type&NETTYPE_LINK_BROADCAST)
1000 {
1001 mem_zero(&sa, sizeof(sa));
1002 sa.sin6_port = htons(addr->port);
1003 sa.sin6_family = AF_INET6;
1004 sa.sin6_addr.s6_addr[0] = 0xff; /* multicast */
1005 sa.sin6_addr.s6_addr[1] = 0x02; /* link local scope */
1006 sa.sin6_addr.s6_addr[15] = 1; /* all nodes */
1007 }
1008 else
1009 netaddr_to_sockaddr_in6(addr, &sa);
1010
1011 d = sendto((int)sock.ipv6sock, (const char*)data, size, 0, (struct sockaddr *)&sa, sizeof(sa));
1012 }
1013 else
1014 dbg_msg("net", "can't sent ipv6 traffic to this socket");
1015 }
1016 /*
1017 else
1018 dbg_msg("net", "can't sent to network of type %d", addr->type);
1019 */
1020
1021 /*if(d < 0)
1022 {
1023 char addrstr[256];
1024 net_addr_str(addr, addrstr, sizeof(addrstr));
1025
1026 dbg_msg("net", "sendto error (%d '%s')", errno, strerror(errno));

Callers

nothing calls this directly

Calls 4

mem_zeroFunction · 0.85
netaddr_to_sockaddr_inFunction · 0.85
dbg_msgFunction · 0.85
netaddr_to_sockaddr_in6Function · 0.85

Tested by

no test coverage detected