| 57 | lv2_socket_native::~lv2_socket_native() noexcept { lv2_socket_native::close(); } |
| 58 | |
| 59 | s32 lv2_socket_native::create_socket() { |
| 60 | ensure(family == SYS_NET_AF_INET); |
| 61 | ensure(type == SYS_NET_SOCK_STREAM || type == SYS_NET_SOCK_DGRAM); |
| 62 | ensure(protocol == SYS_NET_IPPROTO_IP || protocol == SYS_NET_IPPROTO_TCP || |
| 63 | protocol == SYS_NET_IPPROTO_UDP); |
| 64 | |
| 65 | const int native_domain = AF_INET; |
| 66 | |
| 67 | const int native_type = |
| 68 | type == SYS_NET_SOCK_STREAM ? SOCK_STREAM : SOCK_DGRAM; |
| 69 | |
| 70 | int native_proto = protocol == SYS_NET_IPPROTO_TCP ? IPPROTO_TCP |
| 71 | : protocol == SYS_NET_IPPROTO_UDP ? IPPROTO_UDP |
| 72 | : IPPROTO_IP; |
| 73 | |
| 74 | auto socket_res = ::socket(native_domain, native_type, native_proto); |
| 75 | |
| 76 | if (socket_res == invalid_socket) { |
| 77 | return -get_last_error(false); |
| 78 | } |
| 79 | |
| 80 | set_socket(socket_res, family, type, protocol); |
| 81 | return CELL_OK; |
| 82 | } |
| 83 | |
| 84 | void lv2_socket_native::set_socket(socket_type native_socket, |
| 85 | lv2_socket_family family, |
no test coverage detected