mirror of
https://github.com/eddyem/CCD_Capture.git
synced 2025-12-06 02:35:13 +03:00
fixed socket read bug
This commit is contained in:
parent
a0bb1890a7
commit
868e9daea6
15
client.c
15
client.c
@ -55,18 +55,24 @@ static size_t imbufsz = 0; // image buffer for allocated `ima`
|
|||||||
static uint8_t *imbuf = NULL;
|
static uint8_t *imbuf = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// read message from queue or file descriptor
|
||||||
static char *readmsg(int fd){
|
static char *readmsg(int fd){
|
||||||
static cc_strbuff *buf = NULL;
|
static cc_strbuff *buf = NULL;
|
||||||
if(!buf) buf = cc_strbufnew(BUFSIZ, 255);
|
if(!buf) buf = cc_strbufnew(BUFSIZ, 256);
|
||||||
if(1 == cc_canberead(fd)){
|
int test(){
|
||||||
if(cc_read2buf(fd, buf)){
|
|
||||||
size_t got = cc_getline(buf);
|
size_t got = cc_getline(buf);
|
||||||
if(got > 255){
|
if(got > 255){
|
||||||
DBG("Client fd=%d gave buffer overflow", fd);
|
DBG("Client fd=%d gave buffer overflow", fd);
|
||||||
LOGMSG("SERVER client fd=%d buffer overflow", fd);
|
LOGMSG("SERVER client fd=%d buffer overflow", fd);
|
||||||
}else if(got){
|
}else if(got){
|
||||||
return buf->string;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if(test()) return buf->string;
|
||||||
|
if(1 == cc_canberead(fd)){
|
||||||
|
if(cc_read2buf(fd, buf)){
|
||||||
|
if(test()) return buf->string;
|
||||||
}else ERRX("Server disconnected");
|
}else ERRX("Server disconnected");
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -120,6 +126,7 @@ DBG("1 msg-> %s, ans -> %s", msg, ans);
|
|||||||
DBG("BREAK");
|
DBG("BREAK");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return ((ans) ? TRUE : FALSE);
|
return ((ans) ? TRUE : FALSE);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,6 +31,7 @@ static glob_pars G = {
|
|||||||
.setwheel = -1,
|
.setwheel = -1,
|
||||||
.fanspeed = -1,
|
.fanspeed = -1,
|
||||||
.shmkey = 7777777,
|
.shmkey = 7777777,
|
||||||
|
.anstmout = -1,
|
||||||
.infty = -1
|
.infty = -1
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -109,6 +110,7 @@ myoption cmdlnopts[] = {
|
|||||||
{"client", NO_ARGS, &G.client,1, arg_none, NULL, N_("run as client")},
|
{"client", NO_ARGS, &G.client,1, arg_none, NULL, N_("run as client")},
|
||||||
{"viewer", NO_ARGS, &G.viewer,1, arg_none, NULL, N_("passive viewer (only get last images)")},
|
{"viewer", NO_ARGS, &G.viewer,1, arg_none, NULL, N_("passive viewer (only get last images)")},
|
||||||
{"restart", NO_ARGS, &G.restart,1, arg_none, NULL, N_("restart image server")},
|
{"restart", NO_ARGS, &G.restart,1, arg_none, NULL, N_("restart image server")},
|
||||||
|
{"timeout", NEED_ARG, NULL, '0', arg_double, APTR(&G.anstmout), N_("network answer timeout (default: 0.1s)")},
|
||||||
|
|
||||||
{"shmkey", NEED_ARG, NULL, 'k', arg_int, APTR(&G.shmkey), N_("shared memory (with image data) key (default: 7777777)")},
|
{"shmkey", NEED_ARG, NULL, 'k', arg_int, APTR(&G.shmkey), N_("shared memory (with image data) key (default: 7777777)")},
|
||||||
{"forceimsock",NO_ARGS, &G.forceimsock,1, arg_none, NULL, N_("force using image through socket transition even if can use SHM")},
|
{"forceimsock",NO_ARGS, &G.forceimsock,1, arg_none, NULL, N_("force using image through socket transition even if can use SHM")},
|
||||||
|
|||||||
@ -75,6 +75,7 @@ typedef struct{
|
|||||||
int infty; // run (==1) or stop (==0) infinity loop
|
int infty; // run (==1) or stop (==0) infinity loop
|
||||||
float gain; // gain level (only for CMOS)
|
float gain; // gain level (only for CMOS)
|
||||||
float brightness; // brightness (only for CMOS)
|
float brightness; // brightness (only for CMOS)
|
||||||
|
double anstmout; // answer timeout by socket
|
||||||
double exptime; // time of exposition in seconds
|
double exptime; // time of exposition in seconds
|
||||||
double temperature; // temperature of CCD
|
double temperature; // temperature of CCD
|
||||||
double gotopos; // move stepper motor of focuser to absolute position
|
double gotopos; // move stepper motor of focuser to absolute position
|
||||||
|
|||||||
3
main.c
3
main.c
@ -91,6 +91,9 @@ int main(int argc, char **argv){
|
|||||||
struct stat filestat;
|
struct stat filestat;
|
||||||
if(0 == stat(GP->outfile, &filestat)) ERRX("File %s exists!", GP->outfile);
|
if(0 == stat(GP->outfile, &filestat)) ERRX("File %s exists!", GP->outfile);
|
||||||
}
|
}
|
||||||
|
if(GP->anstmout > 0.){
|
||||||
|
if(!cc_setAnsTmout(GP->anstmout)) ERRX("Can't set answer timeout to %g", GP->anstmout);
|
||||||
|
}
|
||||||
if(GP->port){
|
if(GP->port){
|
||||||
if(GP->path){
|
if(GP->path){
|
||||||
WARNX("Options `port` and `path` can't be used together! Point `port` for TCP socket or `path` for UNIX.");
|
WARNX("Options `port` and `path` can't be used together! Point `port` for TCP socket or `path` for UNIX.");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user