| 1212 | } |
| 1213 | |
| 1214 | NETSOCKET net_tcp_create(NETADDR bindaddr) |
| 1215 | { |
| 1216 | NETSOCKET sock = (NETSOCKET_INTERNAL *)malloc(sizeof(*sock)); |
| 1217 | *sock = invalid_socket; |
| 1218 | |
| 1219 | if(bindaddr.type & NETTYPE_IPV4) |
| 1220 | { |
| 1221 | NETADDR bindaddr_ipv4 = bindaddr; |
| 1222 | bindaddr_ipv4.type = NETTYPE_IPV4; |
| 1223 | const int socket4 = priv_net_create_socket(AF_INET, SOCK_STREAM, &bindaddr_ipv4); |
| 1224 | if(socket4 >= 0) |
| 1225 | { |
| 1226 | sock->type |= NETTYPE_IPV4; |
| 1227 | sock->ipv4sock = socket4; |
| 1228 | } |
| 1229 | } |
| 1230 | |
| 1231 | if(bindaddr.type & NETTYPE_IPV6) |
| 1232 | { |
| 1233 | NETADDR bindaddr_ipv6 = bindaddr; |
| 1234 | bindaddr_ipv6.type = NETTYPE_IPV6; |
| 1235 | const int socket6 = priv_net_create_socket(AF_INET6, SOCK_STREAM, &bindaddr_ipv6); |
| 1236 | if(socket6 >= 0) |
| 1237 | { |
| 1238 | sock->type |= NETTYPE_IPV6; |
| 1239 | sock->ipv6sock = socket6; |
| 1240 | } |
| 1241 | } |
| 1242 | |
| 1243 | if(sock->type == NETTYPE_INVALID) |
| 1244 | { |
| 1245 | free(sock); |
| 1246 | sock = nullptr; |
| 1247 | } |
| 1248 | |
| 1249 | return sock; |
| 1250 | } |
| 1251 | |
| 1252 | int net_tcp_listen(NETSOCKET sock, int backlog) |
| 1253 | { |
no test coverage detected