| 672 | } |
| 673 | |
| 674 | void xs_socket_write(xsMachine *the) |
| 675 | { |
| 676 | xsSocket xss = xsmcGetHostData(xsThis); |
| 677 | int argc = xsmcArgc; |
| 678 | uint8_t *dst; |
| 679 | uint16_t available, needed = 0; |
| 680 | unsigned char pass, arg; |
| 681 | |
| 682 | if ((NULL == xss) || xss->done) |
| 683 | xsUnknownError("write on closed socket"); |
| 684 | |
| 685 | if (kUDP == xss->kind) { |
| 686 | char temp[64]; |
| 687 | |
| 688 | xsmcToStringBuffer(xsArg(0), temp, sizeof(temp)); |
| 689 | |
| 690 | int len = xsmcGetArrayBufferLength(xsArg(2)); |
| 691 | uint8_t *buf = xsmcToArrayBuffer(xsArg(2)); |
| 692 | |
| 693 | struct sockaddr_in dest_addr = { 0 }; |
| 694 | |
| 695 | int port = xsmcToInteger(xsArg(1)); |
| 696 | |
| 697 | dest_addr.sin_family = AF_INET; |
| 698 | dest_addr.sin_port = htons(port); |
| 699 | inet_pton(AF_INET, temp, &dest_addr.sin_addr.s_addr); |
| 700 | |
| 701 | int result = sendto(xss->skt, (char*)buf, len, 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr)); |
| 702 | if (result < 0) |
| 703 | xsUnknownError("sendto failed"); |
| 704 | |
| 705 | modInstrumentationAdjust(NetworkBytesWritten, len); |
| 706 | |
| 707 | return; |
| 708 | } |
| 709 | |
| 710 | if (kRAW == xss->kind) { |
| 711 | char temp[64]; |
| 712 | |
| 713 | xsmcToStringBuffer(xsArg(0), temp, sizeof(temp)); |
| 714 | |
| 715 | int len = xsmcGetArrayBufferLength(xsArg(1)); |
| 716 | uint8_t *buf = xsmcToArrayBuffer(xsArg(1)); |
| 717 | |
| 718 | struct sockaddr_in dest_addr = { 0 }; |
| 719 | dest_addr.sin_family = AF_INET; |
| 720 | inet_pton(AF_INET, temp, &dest_addr.sin_addr.s_addr); |
| 721 | |
| 722 | int result = sendto(xss->skt, (char*)buf, len, 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr)); |
| 723 | if (result < 0) |
| 724 | xsUnknownError("sendto failed"); |
| 725 | |
| 726 | modInstrumentationAdjust(NetworkBytesWritten, len); |
| 727 | return; |
| 728 | } |
| 729 | |
| 730 | available = sizeof(xss->writeBuf) - xss->writeBytes; |
| 731 | if (0 == argc) { |
nothing calls this directly
no test coverage detected