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

Function SysSendTo

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

* SysSendTo (sockfd, buf, len, flags, destaddr, addrlen) - Send data through a socket * sockfd - Socket file descriptor * buf - data * len - data length * destaddr - Destination address * addrlen - Address length * * On Success - return amount of data sent * On Failure - return -1 */

Source from the content-addressed store, hash-verified

1364 * On Failure - return -1
1365 */
1366long SysSendTo(regs64_t* r){
1367 process_t* proc = Scheduler::GetCurrentProcess();
1368 fs_fd_t* handle = proc->fileDescriptors.get_at(SC_ARG0(r));
1369
1370 uint8_t* buffer = (uint8_t*)(SC_ARG1(r));
1371 size_t len = SC_ARG2(r);
1372 uint64_t flags = SC_ARG3(r);
1373
1374 if(!handle){
1375 Log::Warning("sys_send: Invalid file descriptor: ", SC_ARG0(r));
1376 return -1;
1377 }
1378
1379 if((handle->node->flags & FS_NODE_TYPE) != FS_NODE_SOCKET){
1380 Log::Warning("sys_send: File (Descriptor: %d) is not a socket", SC_ARG0(r));
1381 return -2;
1382 }
1383
1384 if(!Memory::CheckUsermodePointer(SC_ARG1(r), len, proc->addressSpace)){
1385 Log::Warning("sys_send: Invalid buffer ptr");
1386 return -3;
1387 }
1388
1389 socklen_t slen = SC_ARG2(r);
1390
1391 sockaddr_t* addr = (sockaddr_t*)SC_ARG1(r);
1392
1393 Socket* sock = (Socket*)handle->node;
1394 return sock->SendTo(buffer, len, flags, addr, slen);
1395}
1396
1397/*
1398 * SysReceive (sockfd, buf, len, flags) - Receive data through a socket

Callers

nothing calls this directly

Calls 5

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

Tested by

no test coverage detected