| 909 | } |
| 910 | |
| 911 | NETSOCKET 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 |
nothing calls this directly
no test coverage detected