MCPcopy Create free account
hub / github.com/LemonOSProject/LemonOS / SysBind

Function SysBind

Kernel/src/arch/x86_64/syscalls.cpp:1183–1206  ·  view source on GitHub ↗

* SysBind (sockfd, addr, addrlen) - Bind address to socket * sockfd - Socket file descriptor * addr - sockaddr structure * addrlen - size of addr * * On Success - return 0 * On Failure - return -1 */

Source from the content-addressed store, hash-verified

1181 * On Failure - return -1
1182 */
1183long SysBind(regs64_t* r){
1184 process_t* proc = Scheduler::GetCurrentProcess();
1185 fs_fd_t* handle = proc->fileDescriptors.get_at(SC_ARG0(r));
1186 if(!handle){
1187 Log::Warning("sys_bind: Invalid file descriptor: ", SC_ARG0(r));
1188 return -1;
1189 }
1190
1191 if((handle->node->flags & FS_NODE_TYPE) != FS_NODE_SOCKET){
1192 Log::Warning("sys_bind: File (Descriptor: %d) is not a socket", SC_ARG0(r));
1193 return -2;
1194 }
1195
1196 socklen_t len = SC_ARG2(r);
1197
1198 sockaddr_t* addr = (sockaddr_t*)SC_ARG1(r);
1199 if(!Memory::CheckUsermodePointer(SC_ARG1(r), len, proc->addressSpace)){
1200 Log::Warning("sys_bind: Invalid sockaddr ptr");
1201 return -3;
1202 }
1203
1204 Socket* sock = (Socket*)handle->node;
1205 return sock->Bind(addr, len);
1206}
1207
1208/*
1209 * SysListen (sockfd, backlog) - Marks socket as passive

Callers

nothing calls this directly

Calls 5

GetCurrentProcessFunction · 0.85
WarningFunction · 0.85
CheckUsermodePointerFunction · 0.85
get_atMethod · 0.80
BindMethod · 0.45

Tested by

no test coverage detected