| 544 | } |
| 545 | |
| 546 | static int l_udpserver (lua_State *L) { |
| 547 | soup::SocketAddr addr = checkaddr(L, 1); |
| 548 | const auto port = addr.getPort(); |
| 549 | |
| 550 | StandaloneSocket& ss = pushsocket(L); |
| 551 | ss.sock = ss.sched.addSocket(); |
| 552 | ss.udp = true; |
| 553 | ss.from_listener = true; |
| 554 | if (addr.ip.isZero()) { |
| 555 | if (l_unlikely(!ss.sock->udpBind6(port))) |
| 556 | return 0; |
| 557 | ss.recvLoopUdp(*ss.sock); |
| 558 | #if SOUP_WINDOWS |
| 559 | auto ipv4_sock = ss.sched.addSocket(); |
| 560 | if (l_likely(ipv4_sock->udpBind4(port))) |
| 561 | ss.recvLoopUdp(*ipv4_sock); |
| 562 | #endif |
| 563 | } |
| 564 | else { |
| 565 | if (l_unlikely(!ss.sock->udpBind(addr.ip, addr.port))) |
| 566 | return 0; |
| 567 | } |
| 568 | #if SOUP_WINDOWS |
| 569 | ss.sched.tick(); lua_assert(ss.sched.workers.size() >= 2); |
| 570 | #endif |
| 571 | return 1; |
| 572 | } |
| 573 | |
| 574 | static const luaL_Reg funcs_socket[] = { |
| 575 | {"connect", l_connect}, |
nothing calls this directly
no test coverage detected