#include #include #include #include #include #include #include #include #include #define PIXEL_FORMAT "PX %zd %zd %02x%02x%02x\n" int cct(const char *target, int port) { printf("Reconnecting %s:%d\n", target, port); int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (!sockfd) { fprintf(stderr, "No sockfd.\n"); return -1; } struct sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(port); if (inet_pton(AF_INET, target, &serv_addr.sin_addr) != 1) { fprintf(stderr, "Address error. \"%s\"\n", target); return -2; } if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr))) { fprintf(stderr, "Connect error.\n"); return -3; } return sockfd; } int sendframe(int fd, uint8_t *img, int w, int h, int ox, int oy) { static unsigned long fcnt=0; printf("frame %lu %dx%d @pos %dx%d\n", fcnt++, w, h, ox, oy); int fmtlen = snprintf(NULL, 0, PIXEL_FORMAT, (size_t)1000, (size_t)1000, 0xff, 0xff, 0xff); char *out = malloc(1400); if (!out) { fprintf(stderr, "Malloc error.\n"); return -4; } char *p = out; for (size_t x=0; x 1400-fmtlen-1) { if (send(fd, out, p-out, 0) < 0) { fprintf(stderr, "Send error. %d %s\n", errno, strerror(errno)); return -5; } p = out; } } } free(out); usleep(1000); return 0; } void discct(int fd) { close(fd); }