* 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 */
| 1181 | * On Failure - return -1 |
| 1182 | */ |
| 1183 | long 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 |
nothing calls this directly
no test coverage detected