ssize_t recvfrom(int socket, void *restrict buffer, size_t length, int flags, struct sockaddr *restrict address, socklen_t *restrict address_len);
| 331 | |
| 332 | // ssize_t recvfrom(int socket, void *restrict buffer, size_t length, int flags, struct sockaddr *restrict address, socklen_t *restrict address_len); |
| 333 | U32 krecvfrom(KThread* thread, U32 socket, U32 buffer, U32 length, U32 flags, U32 address, U32 address_len) { |
| 334 | KFileDescriptorPtr fd = thread->process->getFileDescriptor(socket); |
| 335 | |
| 336 | if (!fd) { |
| 337 | return -K_EBADF; |
| 338 | } |
| 339 | if (IS_NOT_SOCKET(fd)) { |
| 340 | return -K_ENOTSOCK; |
| 341 | } |
| 342 | std::shared_ptr<KSocketObject> s = std::dynamic_pointer_cast<KSocketObject>(fd->kobject); |
| 343 | return s->recvfrom(thread, fd, buffer, length, flags, address, address_len); |
| 344 | } |
| 345 | |
| 346 | bool isNativeSocket(KThread* thread, FD desc) { |
| 347 | KFileDescriptorPtr fd = thread->process->getFileDescriptor(desc); |
no test coverage detected