MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / xs_socket_write

Function xs_socket_write

modules/network/socket/lin/modSocket.c:642–749  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

640}
641
642void xs_socket_write(xsMachine *the)
643{
644 xsSocket xss = xsmcGetHostData(xsThis);
645 int argc = xsmcArgc;
646 uint8_t *dst;
647 uint16_t available, needed = 0;
648 unsigned char pass, arg;
649
650 if ((NULL == xss) || xss->done)
651 xsUnknownError("write on closed socket");
652
653 if (kUDP == xss->kind) {
654 char temp[64];
655
656 xsmcToStringBuffer(xsArg(0), temp, sizeof(temp));
657
658 int len = xsmcGetArrayBufferLength(xsArg(2));
659 uint8_t *buf = xsmcToArrayBuffer(xsArg(2));
660
661 struct sockaddr_in dest_addr = { 0 };
662
663 int port = xsmcToInteger(xsArg(1));
664
665 dest_addr.sin_family = AF_INET;
666 dest_addr.sin_port = htons(port);
667 inet_pton(AF_INET, temp, &dest_addr.sin_addr.s_addr);
668
669 int result = sendto(xss->skt, (char*)buf, len, 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
670 if (result < 0)
671 xsUnknownError("sendto failed");
672
673 modInstrumentationAdjust(NetworkBytesWritten, len);
674
675 return;
676 }
677
678 if (kRAW == xss->kind) {
679 char temp[64];
680
681 xsmcToStringBuffer(xsArg(0), temp, sizeof(temp));
682
683 int len = xsmcGetArrayBufferLength(xsArg(1));
684 uint8_t *buf = xsmcToArrayBuffer(xsArg(1));
685
686 struct sockaddr_in dest_addr = { 0 };
687 dest_addr.sin_family = AF_INET;
688 inet_pton(AF_INET, temp, &dest_addr.sin_addr.s_addr);
689
690 int result = sendto(xss->skt, (char*)buf, len, 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
691 if (result < 0)
692 xsUnknownError("sendto failed");
693
694 modInstrumentationAdjust(NetworkBytesWritten, len);
695 return;
696 }
697
698 available = sizeof(xss->writeBuf) - xss->writeBytes;
699 if (0 == argc) {

Callers

nothing calls this directly

Calls 1

doFlushWriteFunction · 0.70

Tested by

no test coverage detected