[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Noob libssh question
[Thread Prev] | [Thread Next]
- Subject: Re: Noob libssh question
- From: Alan Dunn <amdunn@xxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Thu, 6 Feb 2014 21:33:59 -0600
- To: libssh@xxxxxxxxxx
Maybe I'm missing something, but the only way I see ssh_channel_read
possibly returning SSH_AGAIN (-2) looking at the source in master is
in the last line of ssh_channel_read_timeout (in src/channels.c) if
len is large enough to cause an overflow. Otherwise every other path
does not return SSH_AGAIN (assuming SSH_AGAIN != 0, -1, SSH_ERROR as
seems to be the case). Actually, the documentation seems less
specific than it could be in that SSH_AGAIN shouldn't come back even
in non-blocking mode...
Though perhaps your binary is linking against a different version of
libssh than you expect? This has certainly happened to me before with
both a system-installed package and the version I was hoping to use.
On Thu, Feb 6, 2014 at 8:10 PM, craig and heather <calhjh@xxxxxxxxx> wrote:
> I've made an Objective-C class called RemoteAccess to encapsulate all ssh
> functionality. I've attached it to this note.
>
>
> On Thu, Feb 6, 2014 at 3:49 PM, craig and heather <calhjh@xxxxxxxxx> wrote:
>>
>> Hello,
>>
>> I am using libssl to execute simple C programs between raspberry pi's.
>> These programs are simple SDL graphics applications similar to that listed
>> below that don't write anything to stderr (unless there is an error) or
>> stdout.
>>
>> I am also doing some remote file creation and deletion using the same
>> libssl functionality.
>>
>> When I remotely execute commands such as "touch runfile" or "rm runfile" I
>> can see 0 bytes are returned from ssh_channel_read function as would be
>> expected. However whenever I run one of my little C programs
>> ssh_channel_read always returns -2 but the program runs successfully on the
>> remote system.
>>
>> Is there something I need to do in my C programs to satisfy
>> ssh_channel_read?
>>
>> Thanks for looking
>>
>>
>> /*
>> * A Smart Screen Module
>> *
>> * Sets the entire screen to a specified RGB color
>> * Typical Call:
>> * colorscreen 0 255 0
>> *
>> * Concept and Implementation by: Craig A. Lindley
>> * Last Update: 01/30/2014
>> */
>>
>> #include <stdio.h>
>> #include <stdlib.h>
>> #include <unistd.h>
>> #include <sys/stat.h>
>> #include <sys/types.h>
>>
>> #include "SDL/SDL.h"
>>
>> #define RUN_FILE_NAME "runfile"
>> #define BUSY_FILE_NAME "busy"
>>
>> // Check for file existance
>> int file_exists(char *filename) {
>>
>> struct stat buffer;
>> return (stat (filename, &buffer) == 0);
>> }
>>
>> int main (int argc, char* args[]) {
>>
>> if (argc != 4) {
>> fprintf(stderr, "Wrong number of arguments\n");
>> return -1;
>> }
>>
>> // Extract RGB values from the command line arguments
>> int red = atoi(args[1]);
>> int green = atoi(args[2]);
>> int blue = atoi(args[3]);
>>
>> // Range check the specified color values
>> if ((red < 0) || (red > 255) ||
>> (green < 0) || (green > 255) ||
>> (blue < 0) || (blue > 255)) {
>> fprintf(stderr, "Color values in range 0 <= value < 256\n");
>> return -1;
>> }
>>
>> // Create the busy file
>> FILE *pFile = fopen (BUSY_FILE_NAME,"w");
>> if (pFile != NULL) {
>> fclose(pFile);
>> } else {
>> fprintf(stderr, "Could not create busy file\n");
>> return -1;
>> }
>>
>> putenv("SDL_FBDEV=/dev/fb1");
>> putenv("SDL_VIDEODRIVER=fbcon");
>>
>> // Start SDL
>> SDL_Init(SDL_INIT_VIDEO);
>>
>> // Turn off cursor
>> SDL_ShowCursor(SDL_DISABLE);
>>
>> const SDL_VideoInfo *videoInfo = SDL_GetVideoInfo();
>>
>> int width = videoInfo->current_w;
>> int height = videoInfo->current_h;
>> uint8_t bpp = videoInfo->vfmt->BitsPerPixel;
>>
>> // Set up screen
>> SDL_Surface *screen = SDL_SetVideoMode(width, height, bpp,
>> SDL_SWSURFACE);
>> if (!screen) {
>> fprintf(stderr, "SDL_SetVideoMode failed\n");
>> return -1;
>> }
>> // Create the specified color
>> uint32_t color = SDL_MapRGB(screen->format, red, green, blue);
>>
>> // Create rect the size of the screen
>> SDL_Rect rect = {0, 0, width, height};
>>
>> // Fill the screen with the specified color
>> SDL_FillRect(screen, &rect, color);
>>
>> // Update Screen
>> SDL_Flip(screen);
>>
>> // Pause
>> SDL_Delay(1000);
>>
>> // Wait until runfile is gone to terminate
>> while (file_exists(RUN_FILE_NAME)) {
>> SDL_Delay(50);
>> }
>>
>> // Delete the busy file
>> if (remove(BUSY_FILE_NAME) != 0) {
>> fprintf(stderr, "Error deleting busy file\n");
>> }
>>
>> // Quit SDL
>> SDL_Quit();
>>
>> return 0;
>> }
>>
>>
>> --
>> Craig Lindley
>>
>> If you're one in a million, there are now seven thousand people exactly
>> like you.
>
>
>
>
> --
> Craig Lindley / Heather Hubbard
>
> New Recordings: craigandheather.net/cnmpage.html
> Latest CD: craigandheather.net/songsilike2013cd.html
>
> Personal Website: craigandheather.net
> Business Website: clockwork.craigandheather.net
> Phone: (719) 495-1873
> Cell: (719) 502-7925
>
> If you're one in a million, there are now seven thousand people exactly like
> you.
| Noob libssh question | craig and heather <calhjh@xxxxxxxxx> |
| Re: Noob libssh question | craig and heather <calhjh@xxxxxxxxx> |