internal static unsafe (SocketError socketError, int bytesTransferred) SendMsg(SafeSocketHandle handle, msghdr *msghdr) { int bytesTransferred; SocketError socketError; int fd = handle.DangerousGetHandle().ToInt32(); // TODO: make safe int rv; do { rv = (int)sendmsg(fd, msghdr, 0); } while (rv == -1 && errno == EINTR); if (rv < 0) { bytesTransferred = 0; socketError = GetSocketErrorForErrno(errno); } else { bytesTransferred = rv; socketError = SocketError.Success; } return(socketError, bytesTransferred); }
internal static InnerSafeCloseSocket Accept(SafeSocketHandle socketHandle, byte[] socketAddress, ref int socketAddressSize) { InnerSafeCloseSocket result = Interop.Winsock.accept(socketHandle.DangerousGetHandle(), socketAddress, ref socketAddressSize); if (result.IsInvalid) { result.SetHandleAsInvalid(); } return(result); }