Make socket port binding a separate step with ipc_netsockbindport() syscall

This commit is contained in:
2025-10-29 22:33:41 +01:00
parent 4417141216
commit d947192475
10 changed files with 54 additions and 15 deletions

View File

@ -6,12 +6,11 @@
#include "util/util.h"
#include "errors.h"
int32_t SYSCALL3(sys_ipc_netsockmake, net1, proto1, port1) {
int32_t SYSCALL2(sys_ipc_netsockmake, net1, proto1) {
uint16_t net = net1;
uint16_t proto = proto1;
uint16_t port = port1;
IpcNetSock *netsock = ipc_netsockmake(net, proto, port, _caller_pid);
IpcNetSock *netsock = ipc_netsockmake(net, proto, _caller_pid);
if (netsock == NULL) {
return E_NOMEMORY;
@ -102,3 +101,24 @@ int32_t SYSCALL1(sys_ipc_netsockdelete, socknum1) {
return ipc_netsockdelete(ns);
}
int32_t SYSCALL2(sys_ipc_netsockbindport, socknum1, port1) {
size_t socknum = socknum1;
uint16_t port = port1;
spinlock_acquire(&IPC_NETSOCKS.spinlock);
size_t idx = 0;
IpcNetSock *ns, *nstmp;
LL_FOREACH_SAFE_IDX(IPC_NETSOCKS.netsocks, ns, nstmp, idx) {
if (idx == socknum) {
break;
}
}
spinlock_release(&IPC_NETSOCKS.spinlock);
if (ns == NULL) {
return E_NOENTRY;
}
return ipc_netsockbindport(ns, port);
}