* SysConnect (sockfd, addr, addrlen) - Initiate socket connection * sockfd - Socket file descriptor * addr - sockaddr structure * addrlen - size of addr * * On Success - return 0 * On Failure - return -1 */
| 1291 | * On Failure - return -1 |
| 1292 | */ |
| 1293 | long SysConnect(regs64_t* r){ |
| 1294 | process_t* proc = Scheduler::GetCurrentProcess(); |
| 1295 | fs_fd_t* handle = proc->fileDescriptors.get_at(SC_ARG0(r)); |
| 1296 | if(!handle){ |
| 1297 | Log::Warning("sys_connect: Invalid file descriptor: ", SC_ARG0(r)); |
| 1298 | return -1; |
| 1299 | } |
| 1300 | |
| 1301 | if((handle->node->flags & FS_NODE_TYPE) != FS_NODE_SOCKET){ |
| 1302 | Log::Warning("sys_connect: File (Descriptor: %d) is not a socket", SC_ARG0(r)); |
| 1303 | return -2; |
| 1304 | } |
| 1305 | |
| 1306 | socklen_t len = SC_ARG2(r); |
| 1307 | |
| 1308 | sockaddr_t* addr = (sockaddr_t*)SC_ARG1(r); |
| 1309 | if(!Memory::CheckUsermodePointer(SC_ARG1(r), len, proc->addressSpace)){ |
| 1310 | Log::Warning("sys_connect: Invalid sockaddr ptr"); |
| 1311 | return -3; |
| 1312 | } |
| 1313 | |
| 1314 | Socket* sock = (Socket*)handle->node; |
| 1315 | return sock->Connect(addr, len); |
| 1316 | } |
| 1317 | |
| 1318 | /* |
| 1319 | * SysSend (sockfd, buf, len, flags) - Send data through a socket |
nothing calls this directly
no test coverage detected