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

Function net_udp_create

server/src/system.c:911–967  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

909}
910
911NETSOCKET net_udp_create(NETADDR bindaddr)
912{
913 NETSOCKET sock = invalid_socket;
914 NETADDR tmpbindaddr = bindaddr;
915 int broadcast = 1;
916 int recvsize = 65536;
917
918 if(bindaddr.type&NETTYPE_IPV4)
919 {
920 struct sockaddr_in addr;
921 int socket = -1;
922
923 /* bind, we should check for error */
924 tmpbindaddr.type = NETTYPE_IPV4;
925 netaddr_to_sockaddr_in(&tmpbindaddr, &addr);
926 socket = priv_net_create_socket(AF_INET, SOCK_DGRAM, (struct sockaddr *)&addr, sizeof(addr));
927 if(socket >= 0)
928 {
929 sock.type |= NETTYPE_IPV4;
930 sock.ipv4sock = socket;
931
932 /* set broadcast */
933 setsockopt(socket, SOL_SOCKET, SO_BROADCAST, (const char*)&broadcast, sizeof(broadcast));
934
935 /* set receive buffer size */
936 setsockopt(socket, SOL_SOCKET, SO_RCVBUF, (char*)&recvsize, sizeof(recvsize));
937 }
938 }
939
940 if(bindaddr.type&NETTYPE_IPV6)
941 {
942 struct sockaddr_in6 addr;
943 int socket = -1;
944
945 /* bind, we should check for error */
946 tmpbindaddr.type = NETTYPE_IPV6;
947 netaddr_to_sockaddr_in6(&tmpbindaddr, &addr);
948 socket = priv_net_create_socket(AF_INET6, SOCK_DGRAM, (struct sockaddr *)&addr, sizeof(addr));
949 if(socket >= 0)
950 {
951 sock.type |= NETTYPE_IPV6;
952 sock.ipv6sock = socket;
953
954 /* set broadcast */
955 setsockopt(socket, SOL_SOCKET, SO_BROADCAST, (const char*)&broadcast, sizeof(broadcast));
956
957 /* set receive buffer size */
958 setsockopt(socket, SOL_SOCKET, SO_RCVBUF, (char*)&recvsize, sizeof(recvsize));
959 }
960 }
961
962 /* set non-blocking */
963 net_set_non_blocking(sock);
964
965 /* return */
966 return sock;
967}
968

Callers

nothing calls this directly

Calls 4

netaddr_to_sockaddr_inFunction · 0.85
priv_net_create_socketFunction · 0.85
netaddr_to_sockaddr_in6Function · 0.85
net_set_non_blockingFunction · 0.85

Tested by

no test coverage detected